亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        讓DataGridView智能生成列集

        2014-07-29 05:09:54汪瑩
        中國新通信 2014年7期
        關鍵詞:類庫移動電話出生日期

        【摘要】 DataGridView是一個非常實用的顯示和編輯多行數(shù)據(jù)的控件,通過對它進行適當?shù)臄U展后,使它可以智能地根據(jù)數(shù)據(jù)源的基礎類型有選擇地自動生成列,如果想要對顯示的列集進行變動,只要修改邏輯層中對應的基礎類型的屬性即可,表現(xiàn)層不要作任何修改,大大地提高了工作效率,而且避免了出錯的可能,這完全符合代碼和表現(xiàn)分離的設計理念。

        【關鍵詞】 智能生成列 C# 組件 DataGridView 泛型函數(shù) 反射

        一、引言

        NET Framework 類庫提供的 DataGridView 控件,可以顯示和編輯來自多種不同類型的數(shù)據(jù)源的表格數(shù)據(jù)。深受編程人員的喜愛。它有兩種生成列集的方式:當AutoGenerateColumns設置為false時(此為默認設置),由用戶手動生成列集,當AutoGenerateColumns設置為true時,由DataGridView根據(jù)數(shù)據(jù)源自動生成列集。第二種方式簡單方便,但它是無選擇地將數(shù)據(jù)源所有的列對象都顯示出來,在很多場合下是不符合用戶的要求的。第一種方式雖然靈活有選擇,但必須逐個地生成每一個列對象,很麻煩,當數(shù)據(jù)源的列對象數(shù)比較大時更是如此,而且當數(shù)據(jù)源的列對象名稱有變化時,還必須得手動更新DataGridView的列集中對應的列,不僅費時費力,而且很容易出錯。

        二、思路

        為了讓DataGridView能夠識別哪些列需要顯示,哪些列不需要顯示,可在給數(shù)據(jù)源的基礎類型的列屬性取名時做好特別的記號。筆者是讓需要顯示的列屬性的名稱前面加上由下劃線分隔的前綴。如下所示,Empolyee有兩個公開屬性,其中 “P_是否在崗”這個列屬性有前綴”P”表示需要生成列對象進行顯示,“籍貫”這列屬性沒有前綴表示不需要顯示:

        public class Empolyee

        {

        private Boolean _是否在崗;

        public Boolean P_是否在崗

        {

        get { return _是否在崗; }

        set { _是否在崗 = value; }

        }

        private string _籍貫 = "";

        public string 籍貫

        {

        get { return _籍貫; }

        set

        {

        if (_籍貫 != value)

        {

        _籍貫 = value;

        }

        }

        }

        }

        然后創(chuàng)建一個組件,讓這個組件繼承自DataGridView并擴展一個泛型函數(shù)GenerateColumns()。在此函數(shù)中,依據(jù)NET Framework的反射機理,通過Type的GetProperties()獲取T的屬性名稱數(shù)組進行掃描分析,如果名稱包含由下劃線分隔的前綴,則生成對應的列對象,否則略過而不生成。實際使用時,只要在窗體中放入這個組件,然后只要簡單地用語句GenerateColumns()調用組件的這個泛型函數(shù)就可以實現(xiàn)有選擇地顯示Empolyee的列對象;

        將這個組件編譯成DLL類庫以便重復使用。

        三、應用實例

        本文以Microsoft Visual Studio 2005集成環(huán)境中的C#語言為例,說明具體操作技術。

        新建一個項目,選擇”類庫”模板,且項目取名為”MyLibrary”,然后添加對 “System.Windows.Forms”和” System.Drawing”的引用,最后將其中代碼改成如下內容并生成類庫文件MyLibrary.dll備用,然后關閉包含此項目的解決方案。

        using System;

        using System.ComponentModel;

        using System.Collections.Generic;

        using System.Diagnostics;

        using System.Text;

        using System.Reflection;

        using System.Windows.Forms;

        using System.Drawing;

        namespace MyToolsBox

        {

        ///

        public partial class MyDataGridView : DataGridView

        {

        public MyDataGridView()

        {

        InitializeComponent();

        this.AutoGenerateColumns = false;

        }

        ///

        根據(jù)類別公共屬性名稱,自動生成列對象集

        /// 屬性名稱必須是由下劃線相連的兩部分組成的

        /// 第二部分(建議用漢字)將成為生成列的標題

        /// 如果是布爾型,則使用DataGridViewCheckBoxColumn列

        /// 如果是日期型,則使用自定義的CalendarColumn列

        /// 其它類型,則使用DataGridViewTextBoxColumn列

        /// 泛型類型參數(shù)

        public void GenerateColumns()

        {

        DataGridViewColumn col;

        Type MyType = typeof(T);

        PropertyInfo[] Mypropertyinfo = MyType.GetProperties();

        foreach (PropertyInfo n in Mypropertyinfo)

        {

        int x = n.Name.IndexOf('_');

        if (x > 0 && x + 1 < n.Name.Length)//有前綴

        {

        if (n.PropertyType == typeof(System.Boolean))

        col = new DataGridViewCheckBoxColumn();

        else if (n.PropertyType == typeof(System.DateTime))

        col = new CalendarColumn();//此句使用了筆者自定義的日期類型列CalendarColumn,必須在類庫中包含了對它的定義,讀者在調試時可將此行注釋

        else

        col = new DataGridViewTextBoxColumn();

        col.Name =

        col.DataPropertyName = n.Name;

        col.HeaderText = n.Name.Substring(x + 1);

        this.Columns.Add(col);

        }

        }

        }

        }

        }

        再新建一個項目, 選擇”Windows 應用程序”模板,且將項目取名為”Demo” ,在此項目中,添加一個”新建項”,選擇”類”模板,并取名為Empolyee,然后將類代碼改成如下內容:

        namespace Demo

        {

        public class Empolyee

        {

        private string _檔案編號 = "";

        public string P_檔案編號

        {

        get { return _檔案編號; }

        }

        private string _姓名 = "";

        public string P_姓名

        {

        get { return _姓名; }

        }

        private string _工作單位 = "";

        public string P_工作單位

        {

        get { return _工作單位; }

        }

        private DateTime _出生日期 = System.DateTime.Now.Date;

        public DateTime P_出生日期

        {

        set

        {

        if (_出生日期 != value)

        _出生日期 = value;

        }

        get { return _出生日期;}

        }

        private string _移動電話 = "";

        public string P_移動電話

        {

        get { return _移動電話; }

        set

        {

        if (_移動電話 != value)

        {

        _移動電話 = value;

        }

        }

        }

        private Boolean _是否在崗;

        public Boolean P_是否在崗

        {

        get { return _是否在崗; }

        set { _是否在崗 = value; }

        }

        private string _籍貫 = "";

        public string 籍貫

        {

        get { return _籍貫; }

        set

        {

        if (_籍貫 != value)

        {

        _籍貫 = value;

        }

        }

        }

        ///

        生成并返回演示數(shù)據(jù)

        ///

        static public List GetDemoList()

        {

        List list = new List();

        Empolyee t = new Empolyee();

        t._檔案編號 = "200018";

        t._姓名 = "汪瑩";

        t._工作單位 = "黎川縣職業(yè)中專";

        t._出生日期 = System.DateTime.Parse("1984-01-01");

        t._移動電話 = "13812345678";

        t._籍貫 = "江西省黎川縣";

        list.Add(t);

        return list;

        }

        }

        }

        在項目中添加對剛才生成的“MyLibrary.dll”的引用。

        在項目中打開Form1.cs[設計]界面,右擊工具箱,在彈出的快捷菜單中執(zhí)行”添加選項卡”命令,并將新生成的選項卡命名為”MyToolsBox”,然后將“MyLibrary.dll”文件拖動到此選項卡中,此時在工具箱中可以看到”MyToolsBox”選項卡中有一個組件”MyDataGridView”,從工具箱中拖動這個組件到Form1的窗體中,并適當調整大小與位置。

        最后將其中Form1.cs的代碼改成如下內容并生成文件Demo.exe文件:

        using System;

        using System.Collections.Generic;

        using System.ComponentModel;

        using System.Data;

        using System.Drawing;

        using System.Text;

        using System.Windows.Forms;

        namespace Demo

        {

        public partial class Form1 : Form

        {

        public Form1()

        {

        InitializeComponent();

        //智能生成列集 this.myDataGridView1.GenerateColumns();

        //獲取演示數(shù)據(jù) this.myDataGridView1.DataSource = Demo.Empolyee.GetDemoList();

        this.myDataGridView1.ReadOnly = false;

        }

        }

        }

        開始執(zhí)行,可看到如下的畫面。從中可以看到Empolyee的7個公開屬性,只顯示了其中的六個,“籍貫”這個屬性由于其名稱中不包含用下劃線分隔的前綴,因此沒有在畫面中出現(xiàn):

        四、小結

        DataGridView是一個非常實用的顯示和編輯多行數(shù)據(jù)的控件,通過對它進行適當?shù)臄U展后,使它可以智能地根據(jù)數(shù)據(jù)源的基礎類型有選擇地自動生成列,如果想要對顯示的列集進行變動,只要修改邏輯層中對應的基礎類型的屬性即可,表現(xiàn)層不要作任何修改,大大地提高了工作效率,而且避免了出錯的可能,這完全符合代碼和表現(xiàn)分離的設計理念。

        猜你喜歡
        類庫移動電話出生日期
        第一通移動電話撥打于75年前——科技從有所突破到大獲成功需要什么
        英語文摘(2021年10期)2021-11-22 08:02:36
        用Scratch實現(xiàn)十二星座查詢
        電腦報(2020年47期)2020-12-15 06:56:50
        用Java編寫客戶機/服務器端應用程序
        Python在數(shù)據(jù)可視化中的應用
        數(shù)據(jù)結構課程教學改革方案和應用效果
        軟件工程(2017年12期)2018-01-29 17:35:55
        數(shù)據(jù)結構可視化類庫的設計與實現(xiàn)
        My Dreams
        2013年7月電話用戶分省情況
        電信科學(2013年9期)2013-03-25 01:25:48
        寶貝趣圖
        6月寶貝,生日快樂
        母嬰世界(2007年6期)2007-11-20 05:22:30
        中文字幕在线亚洲精品| 亚洲精品国产主播一区二区 | 婷婷色香五月综合缴缴情| 欧美日韩亚洲国产精品| 波多野结衣一区二区三区视频| 日韩精品久久伊人中文字幕| 日本三级吃奶头添泬| 国产高清在线精品一区| 性做久久久久久久| 日韩黄色大片免费网站| 69国产成人精品午夜福中文| 国产成人无码区免费内射一片色欲| 亚洲αⅴ无码乱码在线观看性色 | 麻豆国产精品一区二区三区| 人妻av无码一区二区三区| 一本色道久久综合狠狠躁 | 欧美成人精品一区二区综合| 亚洲AⅤ樱花无码| 东京热加勒比视频一区| 极品少妇小泬50pthepon| 麻豆国产成人精品午夜视频| 日本人妻伦理片在线观看| 森中文字幕一区二区三区免费| 日本老熟妇50岁丰满| av无码精品一区二区乱子| 日本免费精品一区二区三区视频 | 国产一区二区三区 在线观看| 成人乱码一区二区三区av| 最新国产日韩AV线| 日韩成精品视频在线观看 | 亚洲精品无码av人在线播放| 五月天久久国产你懂的| 男女视频网站免费精品播放| 国产精品视频永久免费播放| 欧美日韩精品一区二区在线观看| 在线你懂| 久久精品国产亚洲av四叶草| 狠狠色噜噜狠狠狠狠米奇777| 久久中文字幕日韩无码视频| 成人性生交大片免费看l| 公和我做好爽添厨房中文字幕|