DataSet和DataTable詳解

來源:互聯網
上載者:User

先構建一個結構與使用者請求資料結構相同的DataTable,然後將使用者的請求資料填充到構建好的DataTable中,最後將DataTable添加到DataSet中。

DataTable,,DataColumn,DataRow 深入研究

DataTable是記憶體中的一個關係資料表,可以獨立建立使用,也可以作為DataSet的一個成員使用!

如何將DataTable作為DataSet的一個成員使用:
首先建立一個DataTable對象,其次通過使用Add方法將其添加到DataSet對象的Tables集合中
樣本:
DataSet dsClass = new DataSet();   //建立一個新的空班級DataSet
DataTable dtClass = new DataTable("Class"); //建立班級表
dsClass.Tables.Add(dtClass);  //將班級表添加到DataSet中
如果沒有指定DataTable名稱時把DataTable添加到DataSet中,該表會得到一個從“0”開始遞增的預設表名

剛開始建立的表沒有表結構,要定義表的結構,必須建立DataColumn對象並將其添加到表的Columns集合中。在為DataTable定義了結構之後,通過DataRow對象將資料添加到表的Rows集合中

 

 

DataColumn

DataColumn是建立DataTable的基礎,通過向DataTable中添加一個或多個DataColumn對象來定義DataTable的結構。DataColumn有一些常用屬性用於對輸入資料的限制,例如:資料類型,資料長度,預設值。

DataColumn的常用屬性
AllowDBNull   是否允許空值
ColumnName    儲存的資料類型
DataType      儲存的資料類型
MaxLength     擷取或設定文本列的最大長度
DafaultValue  預設值
Table        所屬的DataTable的名稱
Unique       DataColumn的值是否唯一

定義DataColumn有兩種方法,
方法一:
//建立班級名稱列
DataColumn className = new DataColumn();
className.ColumnName = "ClassName";
className.DataType = System.Type.GetType("System.String");
className.MaxLength = 50;

//建立班級名稱列
DataColumn className = new DataColumn("ClassName",typeof(string));
className.MaxLength = 50;

 

 

DataRow
DataRow表示DataTable中包含的實際資料,我們可以通過DataRow將資料添加到用DataColumn定義好DataTable中。

//建立班級名稱列
DataColumn className = new DataColumn("ClassName",typeof(string));
className.MaxLength = 50;
//建立一個新的資料行
DataRow drClass = dtClass.NewRow();
drClass["className"] = this.txtClassName.Text.Trim();

 

 

如何自訂DataSet
1.建立DataSet對象
2.建立DataTable對象
3.建立DataColumn對象構建表結構
4.將建立好的表結構添加到表中
5.建立DataRow對象新增資料
6.將資料插入到表中
7.將表添加到DataSet中

樣本:
//建立一個新的空班級DataSet
DataSet dsClass = new DataSet();
//建立班級表
DataTable dtClass = new DataTable("Class");
//建立班級名稱列
DataColumn dcClassName = new DataColumn("ClassName",typeof(string));
className.MaxLength = 50;
//建立年級ID列
DataColumn dcGradeID = new DataColumn(GradeID",typeof(int));
//將定義好列添加到班級表中
dtClass.Columns.Add(dcClassName);
dtClass.Columns.Add(dcGradeID);
//建立一個新的資料行
DataRow drClass = dtClass.NewRow();
drClass["className"] = this.txtClassName.Text.Trim();
drClass["gradeID"] = objGrade.GetGradeIDByGradeName(this.cboGrade.Text.Trim());
//將新的資料行插入班級表中
dtClass.Rows.Add(drClass);
//將班級表添加到DataSet中
dsClass.Tables.Add(dtClass);

如何擷取DataSet中的資料
從DataSet中擷取資料有兩種方式:
1.第一種方式是通過指定DataSet中的具體DataTable的某行某列來擷取資料。
    步驟:
        1.通過表名,從DataSet中擷取指定的DataTable
        2.通過索引,從DataTable中擷取指定的DataRow
        3.通過列名,從DataRow中擷取指定列的資料
例:
//得到班級名稱
dsClass.Table["Class"].Row[0]["ClassName"];
//得到年級ID
dsClass.Tables["Class"].Row[0]["GradeID"]

2.另一種方式是將DataSet中的資料直接綁定到資料展示控制項上。

 

我們一般都需要對從DataSet中提取出來的資料做一些簡單的修飾,如隱藏特定列,按照某列排序。其實很簡單,.net為我們提供了一個DataView對象,它可以像資料庫中的視圖一樣協助我們建立DataSet中資料對應的不同視圖。(一個DataTable可以動態產生多個DataView)

DataView
DataView為我們提供DataTable的動態視圖,並可以對動態產生的視圖中的資料進行排序、笪選等操作,它與資料庫中的視圖類似,唯一不同的是它無法提供關聯DataTable的視圖,它不能排除原表中存在的列,也不能向原表中追加不存在的列

樣本:
//過濾掉使用者狀態為非活動的學員
//對過過濾後的學員資訊以學員名稱降序排序
DataSet dsStudent = new DataSet();
DataView dvStudent = new DataView();
dvStudent.Table = dsStudent.Tables["studentTable"];
dvStudent.RowFilter = "UserState = '活動'";
dvStudent.Sort = "StudentName DESC";

DataView幾個常用的屬性:
Table        用於擷取或設定源DataTable
Sort          擷取或設定DataView的一個或多個排序列以及排序次序
RowFilter     擷取或設定用於篩選在DataView中查看哪些行的運算式
Count          在應用RowFilter後,擷取DataView中的行數

 

經驗:
在開發中如果需要對DataGrigView展示的資料進行動態篩選或排序時,我們最好使用DataTable的DefaultView(預設視圖)屬性來得到DataTable的視圖,這樣我們就可以減少執行個體化DataView對象的步驟,以及擷取DataView對象原DataTable的過程。
DataTable dtStudent = (DataTable)dataGridView.DataSource;
dtStudent.Tables["studentTable"].DefaultView.RowFilter = "UserState='活動'";

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.