ToolStrip control extended


Today one of my clients asked me to show a button in ToolStrip control. He provided that this button should look like a regular button. The one which we use on WinForms. The default button available in ToolStrip control provided limited set of properties than the regular button control. It does not support border, flaststyle etc. properties.

Then from MSDN I found out the ToolStripControlHost class which allows developer to extend any standard .net control and add it to the ToolStrip.
You have to just extend this class so as to add any control. Here is a sample code,
I have used 2 controls A Button and A LinkLabel.
    public class ToolStripControlButton : ToolStripControlHost
    {
        public ToolStripControlButton()
            : base(new Button())
        {
        }

        public Button ButtonControl
        {
            get
            {
                return Control as Button;
            }
        }
    }


    public class ToolStripControlLinkLabel : ToolStripControlHost
    {
        public ToolStripControlLinkLabel()
            : base(new LinkLabel())
        {
        }

        public LinkLabel LinkLabelControl
        {
            get
            {
                return Control as LinkLabel;
            }
        }
    }
Then in the loading event of a form you can add these controls to the ToolStrip as,

ToolStripControlButton tsBtn = new ToolStripControlButton();
tsBtn.Text = "test";

ToolStripControlLinkLabel tsCal = new ToolStripControlLinkLabel();
tsCal.Text = "Visit us";
tsCal.Alignment = ToolStripItemAlignment.Left;
            
toolStrip1.Items.Add(tsCal);
toolStrip1.Items.Add(tsBtn);

When you run your program and when form is loaded it will show you these statndard controls as a part of ToolStrip.

DBML designer over SQLMetal


Today I got an assignment from client that the update query is running too slow. I started debugging it and found that the update is using all the fields. I came to know that LINQ to SQL by default assume that all columns participate in opt concurrency and generates a full WHERE clause.
So the query looks like,

UPDATE [dbo].[TableName]
SET [Column1] = @p1, [Column2] = @p2, [Column2] = @p3, [Column3] = @p4, [Column4] = @p5
WHERE [PRIMARYKEY] = @p0 AND
[Column2] = @p2 AND
[Column2] = @p3 AND
[Column3] = @p4 AND
[Column4] = @p5

From this link http://stackoverflow.com/questions/10136450/submitchanges-internally-adds-all-the-fields-as-where-clause-how-to-get-rid-of I came to know about a property UpdateCheck. This has to be set to NEVER in order to remove it from concurrency controlling. But this is not possible with SQLMetal tool because it generates the class structure straight away through command line.

Then I tried DBML designer. In DBML designer you can set the properties for every column from visual studio. So I dropped my table into the designer and it's respective code generated. Both the tools generate the same code, but designer facilitates you with properties window to change them at any point of time.
With UpdateCheck set to never the query gets generated like this,

UPDATE [dbo].[TableName]
SET [Column1] = @p1, [Column2] = @p2, [Column2] = @p3, [Column3] = @p4, [Column4] = @p5
WHERE [PRIMARYKEY] = @p0

To mention the disadvatages of setting UpdateCheck to never is the application looses concurrency control. The where clause gets cut down and allows multiple users to update the table at the same time.