Oct 27 Tommy | Themes

It's Business Time

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

Oct 18 Tommy | XP Themes

Last Windows XP Themes

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)

Jul 30 Tommy | Themes

Been A Few Days Since The Last Theme

I apparently really love making themes for BlogEngine.  This one is a little bit more on the professional side.

Clear Brown

Jul 21 Tommy | Themes

I love XP

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)

Jun 25 Tommy | Themes

One More Theme

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

Jun 18 Tommy | CodeBits

CodeBits: Object to SqlParameters Extension with Reflection

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.

Jun 16 Tommy | CodeBits

CodeBits: Export ICollection To Excel Compatable Format

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

Jun 12 Tommy | Artwork

Silly Accessories

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.

Jun 11 Tommy | Themes

On A Rampage

I felt like making another theme.  That seems to be all I do.  I need new name suggestions though.

BlackHeart

Apr 22 Tommy | Themes

I'm Still Alive

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

About

Mooglegiant.net is a site maintained by me (mooglegiant).  I occasionally put together blogengine.net themes, and random posts about tech/geek things.  If you like the site, or my work, don't forget to support me.  I'm sure you know where to click.