天天看點

DataSet和DataTable詳解

先建構一個結構與使用者請求資料結構相同的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));

DataRow

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

//建立一個新的資料行

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));

dcClassName.MaxLength = 50;

//建立年級ID列

DataColumn dcGradeID = new DataColumn("GradeID", typeof(int));

//将定義好列添加到班級表中

dtClass.Columns.Add(dcClassName);

dtClass.Columns.Add(dcGradeID);

//建立一個新的資料行

DataRow drClass = dtClass.NewRow();

drClass["className"] = "1124";

drClass["gradeID"] = "522352523";

//将新的資料行插入班級表中

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='活動'";

原文連結:http://www.cnblogs.com/eagle1986/archive/2010/01/24/1655327.html

繼續閱讀