Second post in October! Amazing! Actually I was going over some CSS and tossed together a new greenish theme. It's some odd coloring, but I like it.
Business Time
So I found out that there was 2 other XP Themes that I did not know about. These are offical ones that replace the default Luna theme. Hopefully Windows 7 will have some cooler looking ones eventually.
Embedded.exe (500 KB)
RoyaleNoir.Rar (232 KB)
I apparently really love making themes for BlogEngine. This one is a little bit more on the professional side.
Clear Brown
So, I wanted to do a window like theme for some time now. I decided to slap something together. Maybe someone will take it and improve the graphics a little bit. That would be pretty sweet. I know XP is finally going to die with Windows 7 just around the corner. Tragic.
Royal Blue (XP)
Hey everyone. I converted a Drupal theme to BlogEngine and once again gave it a crazy name.
The layout is heavily inspired by the great work @ Steven Kuhn.
Enjoy!
Mean Green Tea
Don't get me wrong, code generators are a good thing. However sometimes they generate pages and pages of code that are really redundant thanks to reflection.
Especially for generating a DAL for you application. Consider the following extension:
public static List<SqlParamter> BuildParameters(this object obj)
{
List<SqlParameter> collection = new List<SqlParameter>();
foreach (PropertyInfo propertyInfo in obj.GetType().GetProperties())
{
if (propertyInfo.GetValue(obj, null) = null)
{
collection.Add(new SqlParameter(propertyInfo.Name, DBNull.Value));
}
else
{
collection.Add(new SqlParameter(propertyInfo.Name, propertyInfo.GetValue(obj, null)));
}
}
return collection;
}
This will take any object, and create a list of sql parameters from all properties. This might sound a little overboard, but consider the following function.
public static void ExecuteNonQuery(string query, string connection, List<SqlParameter> parameters)
{
using (SqlConnection connection = new SqlConnection(connection))
{
using (SqlCommand command = new SqlCommand(query, connection))
{
command.CommandType = CommandType.Text;
for (int i = 0; i < parameters.Count; i++)
{
command.Parameters.Add(parameters[i]);
}
command.Connection.Open();
int rowsAffected = command.ExecuteNonQuery();
command.Connection.Close();
}
}
}
Now I've wrapped the sqlcommand class into a static helper. What I have done is basically removed any need for generated classes (or manually coded... ugh!) functions to create parameters for a sqlcommand. It would probably work for any DBCommand. The point is and DAL generated code is pointless because we can boil it down to a few functions thanks to reflection. Then usage would be something as follows :
public function Main()
{
// Read object from Database or create new object
// Then manipulate said object
// Update or Insert object into the Database
DalWrapper.ExecuteNonQuery(queryUpdateOrInsert, connection, obj.BuildParameters());
}
Of course my query should really be a store procedure name. At least my BLL / DAL has been condensed by about 75% of what the auto-generated code was, and makes adding new tables and records a breeze since all I really have to do is strong type my object and define the stored procedures.
I've expanded the generic collection handler to include allowing export to excel without the need for the gridview hack.
Little background: The gridview hack is to save a collection to the page first in a gridview. From there it is pretty easy to post the data back to the page as a cvs file. However that requires the gridview to be loaded first with all the data and a second post to occur. It is also not user friendly to display the gridview on a page if it has more then 15 columns or so. This function will help avoid that. Just add it to any class that inherits the CollectionBase class.
Side Note: A full postback must occur. So if you're going to do the export from a button within an AJAX update panel, make sure the panel has the button set for a full postback.
public void ExportToXls(string fileName)
{
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Clear();
// Force as inline, otherwise browsers will think this is an .aspx file or not give it a filename
HttpContext.Current.Response.AddHeader("content-disposition", "inline; filename=" + fileName);
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
HttpContext.Current.Response.Charset = string.Empty;
HttpContext.Current.Response.Flush();
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
Table table = new Table();
table.GridLines = GridLines.Both;
TableRow header = new TableRow();
// Use refection to give us a header row with the property names
foreach (PropertyInfo propertyInfo in this[0].GetType().GetProperties())
{
TableCell cell = new TableCell();
cell.Text = propertyInfo.Name;
header.Cells.Add(cell);
}
// Add some style to the header
header.Style.Add(HtmlTextWriterStyle.BackgroundColor, "#008080");
header.Style.Add(HtmlTextWriterStyle.Color, "#ffffff");
header.Style.Add(HtmlTextWriterStyle.TextAlign, "center");
table.Rows.Add(header);
for (int i = 0; i < this.Count; i++)
{
TableRow dataRow = new TableRow();
foreach (PropertyInfo propertyInfo in this[i].GetType().GetProperties())
{
TableCell cell = new TableCell();
// Error check incase the property is null
if (propertyInfo.GetValue(this[i], null) == null)
{
cell.Text = string.Empty;
}
else
{
cell.Text = propertyInfo.GetValue(this[i], null).ToString();
}
dataRow.Cells.Add(cell);
}
table.Rows.Add(dataRow);
}
table.RenderControl(htw);
HttpContext.Current.Response.Write(sw.ToString());
}
}
HttpContext.Current.Response.End();
}
DataCollectionV2.cs
I'm sure at some armory there is a fine print that accessories prevent status effects by already causing them, thus preventing someone from casting it on you. I'm at a loss of words myself on a paper hat preventing status effects. I'd at least put some flame stripes on there to increase my agility too.

I felt like making another theme. That seems to be all I do. I need new name suggestions though.
BlackHeart
BlogEngine has been upgrade to 1.5. I'm not really sure what that means, but no better time to post again.
Also, I've updated this theme for the 1.5 release. Not much to say about it, a little changes here and there.
Grey Shadow