March 17, 2005

Verbs in C# Whidbey

Error: Verbs Error: no suitable method found to override.
If you have the "public override DesignerVerbCollection Verbs" problem in your UserControl's Class (in C# 2.0 or C# 2005) then you must use an "internal class" of "ControlDesigner" similar to your UserControl's class because the UserControl dose not contain the Verbs property and the "public override DesignerVerbCollection Verbs" can't accept the override method.
The brilliant way to insert a new item in the Actions Menu in the design mode for your UserControl(s) is to use the "internal class" after your UserControl class.
For example:

internal class MyControlDesigner : System.Windows.Forms.Design.ControlDesigner
{
    private DesignerVerbCollection m_pVerbs = new DesignerVerbCollection();
    public override System.ComponentModel.Design.DesignerVerbCollection Verbs
    {
        get
        {
            if (m_pVerbs.Count < 1)
            {
                m_pVerbs.Add(new DesignerVerb("About", new EventHandler(this.heoAbout_Click)));
            }
            return m_pVerbs;
        }
    }
    private void heoAbout_Click(object sender, EventArgs e)
    {
        MessageBox.Show("You're Successful");
    }
}
But this is important that you must show this class to the Runtime Designer, with like this code:
[Designer(typeof(MyControlDesigner))]
You must put this code to top of your master UserControl class.
Please, attention to this: System.Windows.Forms.Design
If you don't have this reference in your Project's References you must add it.
خب راستش بدجوری تو گل گیر کرده بودم تا اینکه راهش پیدا شد. یک پروژه تو 2003 را به 2005 بیارید و بعد از Convert شدن خوب بررسیش کنید. اصولا اغلب تغییرات رو می شه از همین روش پیدا نمود البته تا زمانی که یه help درست حسابی براش بیاد. اگه متن بالا رو هم بخونید متوجه می شوید که چه راحت می شه یک Verb override نوشت تازه کلی هم به کلاس برنامه اضافه می شه :)) خوش باشید.

LLBLGen Foreign Key problem

If you have a problem with FOREIGN KEY(s) in LLBLGen application, you can follow this way:
LLBLGen creates a big table of your database information with one ALTER PROCEDURE that can you find it on their codes. The "IsForeignKey" field is showing the "FOREIGN KEY" that it might be wrong. To solve this problem you can go the source code and correct the "PROCEDURE" just with putting one "TOP 1" in before every "SELECT" like this:
string sSQL = "SELECT INFORMATION_SCHEMA.COLUMNS.*, (SELECT COLUMNPROPERTY (OBJECT_ID (@sTableName), INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME, 'IsComputed')" + ") AS IsComputed,(SELECT COL_LENGTH(@sTableName, INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME )) AS ColumnLength, (SELECT " +"COLUMNPROPERTY (OBJECT_ID(@sTableName), INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME, 'IsIdentity')) AS IsIdentity,(SELECT" + "COLUMNPROPERTY(OBJECT_ID(@sTableName), INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME, 'IsRowGuidCol')) AS IsRowGuidColumn,(ISNULL(" + "(SELECT TOP 1 1 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME=@sTableName AND TABLE_SCHEMA='dbo' AND COLUMN_NAME=" + "INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME AND EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME=@sTableName " + "AND TABLE_SCHEMA='dbo' AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND CONSTRAINT_NAME = INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME)" + "), 0)) AS IsPrimaryKey,(ISNULL((SELECT TOP 1 1 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = @sTableName AND TABLE_SCHEMA='dbo'" + "AND COLUMN_NAME = INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME AND EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = TABLE_NAME=@sTableName AND TABLE_SCHEMA = 'dbo'" + "AND COLUMN_NAME = INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME AND EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE " + "TABLE_NAME = @sTableName AND TABLE_SCHEMA='dbo' AND CONSTRAINT_TYPE = 'UNIQUE' AND CONSTRAINT_NAME = INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME)" + "), 0)) AS HasUniqueConstraint FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @sTableName AND TABLE_SCHEMA='dbo'";

داستان اینه که با یه "TOP 1" در وسط سورس کد برنامة LLBLGen مشکلش با 'FOREIGN KEY' ها حل می شه. پیشنهاد می کنم قبل از Copy/Paste تکه کد بالا رو با اصلش مقایسه کنید.