(PS sqlhelper的文件 竟放到 類庫里了,第二篇已做了分離,邊做邊寫的 ^_^)
做 Winform 項目時,要拖很多控件,感覺在做重復的事,那就應該用程序來完成,那就自己寫一個吧.--人懶就得多”干活” ,
代碼下載 地址 http://pan.baidu.com/s/1nuZjyat
控件的類型 ,及名稱,我們要從數據庫獲取. 下面是 要用到 Sql語句
SELECT * FROM Master..SysDatabases ORDER BY Name --獲取數據庫信息(本文指定了數據庫,所以此條不用,但可用擴展) SELECT Name FROM SysObjects Where XType='U' ORDER BY Name --獲取用戶創建的表名 Select Name from syscolumns Where ID=OBJECT_ID('表名') --獲取字段名 SELECT T1.COLUMN_NAME,T1.DATA_TYPE,T2.value From fn_listextendedproperty (NULL, 'schema', 'dbo', 'table', '表名', 'column', default) T2 Right Join information_schema.columns as T1 on T1.COLUMN_NAME = t2.objname COLLATE Chinese_PRC_CI_AS where T1.TABLE_NAME='表名' --查詢字段類型及說明 (下面是可能出現的錯誤 及解決方案) --獲取字段說明(fn_listextendedproperty不提供參數) --無法解決 equal to 運算中 "Latin1_General_CI_AI" 和 "Chinese_PRC_CI_AS" 之間的排序規則沖突。 --哪個表不是Chinese_PRC_CI_AS排序 加上 COLLATE Chinese_PRC_CI_AS
本章 來說說 簡單的 窗體控件生成.
創建一個 窗體會生成兩個文件,如果這個窗體引用了其他的 資源就會有3個
這里創建的 窗體名為Generator_Simple 所以會生成以下文件
Generator_Simple.cs //窗體上的方法代碼都寫在此文件內
Generator_Simple.Designer.cs //窗體設計代碼(系統生成),控件綁定方法也寫在此文件
Generator_Simple.resx //資源文件如ico文件(如果沒引用此文件可以不要)
好,我們往往 Generator_Simple 窗體上拖一個 button 控件,看看Generator_Simple.Designer.cs 有什么 變化,

比較 代碼,可以知道 ,新建一個 button 控件, Generator_Simple.Designer.cs 有4個地方出現了變化.
//創建 button1 對象
private System.Windows.Forms.Button button1;
//實例化button1 對象
this.button1 = new System.Windows.Forms.Button();
//設置 button1 的基本屬性
this.button1.Location = new System.Drawing.Point(37, 42);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
//把 button1繪制 到窗體
this.Controls.Add(this.button1);
先在窗體上 創建一個 按鈕試試
1 private void btn_Test_Click(object sender, EventArgs e) 2 { 3 Button btn = new Button(); 4 btn.AutoSize = true; 5 btn.Location = new System.Drawing.Point(10,20); //X,Y 6 btn.Text = "新增按鈕"; 7 btn.Click += new System.EventHandler(SayHello); 8 btn.Size = new System.Drawing.Size(75, 23); // width, height 9 this.Controls.Add(btn); 10 11 } 12 private void SayHello(object sender, EventArgs e) 13 { 14 MessageBox.Show("Hello World!"); 15 }

其他控件也按這種方法,就知道怎么的繪制了.
讀取 數據庫,然后
先創建一個簡單的 從數據庫 讀取數遍,在窗體上 創建控件
說下 程序的 架構
WinformGenerator(類庫文件,生成器主要代碼都在這)
IBase(每個空間都有一個接口,用於實現不同屬性的設置)
ILable.cs(Label控件接口)
ITextBox.cs(TextBox控件接口)
Base(控件的基本屬性,此處是模板)
BaseControl.cs(基礎模板的屬性,如名稱,位置,大小)
Control(對Ibase接口的實現,就是創建控件代碼)
GetLabel.cs(創建Label控件代碼)
GetTextBox.cs(創建TextBox控件代碼)
Forms(窗體模板,) //一共講創建3種窗體,本文講最簡單的
SimpleForm.cs(簡單窗體)//本文只講了 Label,TextBox,DateTimePicker 三種控件
Static(靜態文件)
WinFormPars.cs(存放靜態變量的,如sql連接字符,讀取web.config里的value)
WinInfo.cs(存放靜態變量,記錄窗體生成的信息,如控件位置,判斷是否換行)
SqlHelper.cs (讀取數據庫的,)
WinformGenerator_Simple(winForm主體,要引用WinformGenerator 類庫)

篩選表名
var result = tabAll.Where(q => q.Contains(txt_TabName.Text.Trim())).ToArray();
我把每個 控件必須的 屬性 抽離到一個類中,里面有個方法 用於 判斷控件是否換行,在 實現接口創建控件時, 可額外加入其他屬性
簡單的窗體 創建 控件 如下圖片
我生在成的窗體名 是QQ ,拖入 項目, 然后show 一下.
private void btn_Test_Click(object sender, EventArgs e)
{
QQ win = new QQ();
win.ShowDialog();
}

這篇就講到這些吧
PS
WinFormPars.cs 從app.config 的 appSettings讀取數據
TimeFormat 用於 設置 時間格式,代碼中 用到格式化時間,可以這統一設置
Details 窗體上選中表名,會加上 Details 的值,就是從表名, 如果想換成其他 字符,可在app.config 里修改
