服務(wù)熱線
153 8323 9821
數(shù)據(jù)集概述
1.1數(shù)據(jù)集
l 是一種代表關(guān)系數(shù)據(jù)的內(nèi)存駐留結(jié)構(gòu)
l 是以XML 形式表示的數(shù)據(jù)視圖,是一種數(shù)據(jù)關(guān)系視圖。
l 在Visual Studio 和.NET Framework 中,XML 是存儲和傳輸各種數(shù)據(jù)時所用的格式。因此,數(shù)據(jù)集與XML 有密切關(guān)系。
1.2數(shù)據(jù)集分類
– 類型化數(shù)據(jù)集
– 非類型化數(shù)據(jù)集
1.3類型化數(shù)據(jù)集和非類型化數(shù)據(jù)集的區(qū)別
結(jié)構(gòu)體系
功能類型
檢測
類型化數(shù)據(jù)集
類型化數(shù)據(jù)集這樣一種數(shù)據(jù)集,它先從基DataSet 類派生,然后,使用XML 架構(gòu)文件(.xsd 文件)中的信息生成新類。架構(gòu)中的信息(表、列等)被作為一組第一類對象和屬性生成并編譯為此新數(shù)據(jù)集類。
可以直接通過名稱
引用表和列
在VS.NET中可以智能感知元素的類型
非類型化數(shù)據(jù)
集
非類型化數(shù)據(jù)集沒有相應(yīng)的內(nèi)置架構(gòu)。與類型化數(shù)據(jù)集一樣,非類型化數(shù)據(jù)集也包含表、列等,但它們只作為集合公開。
需要通過Tables集
合引用列
不能感知
1.4 數(shù)據(jù)集的屬性
重點:
– Tables
– Relations
創(chuàng)建數(shù)據(jù)集和數(shù)據(jù)表
2.1創(chuàng)建數(shù)據(jù)集:
– 設(shè)計時創(chuàng)建非類型化數(shù)據(jù)集
工具箱“數(shù)據(jù)”
– 運行時創(chuàng)建非類型化數(shù)據(jù)集
2.2 創(chuàng)建數(shù)據(jù)表
• 數(shù)據(jù)表屬性
–最重要的集合:
• Columns
• Rows
• Constraints
• 給數(shù)據(jù)集添加數(shù)據(jù)表
[參考代碼]
//創(chuàng)建數(shù)據(jù)集
DataSet ds = new DataSet("myDS");
DataTable dsMaster = new DataTable("master");
DataTable dsChild = new DataTable("child");
ds.Tables.Add(dsMaster);
ds.Tables.Add(dsChild);
2.3 為數(shù)據(jù)表添加列
• Columns集合屬性
• 為數(shù)據(jù)表添加列
2.4 為數(shù)據(jù)表添加行
• Rows屬性
• Rows.Add方法
– Add(DataRow):向數(shù)據(jù)表中添加指定的數(shù)據(jù)行
• 為數(shù)據(jù)表添加行
[參考代碼]
//添加列
ds.Tables["master"].Columns.Add("masterID", typeof(Int32));
//添加行
DataRow dr = ds.Tables["master"].NewRow();
dr["masterID"] = "";
ds.Tables["master"].Rows.Add(dr);
//修改表頭
ds.Tables["master"].Columns["masterID"].Caption = "主ID";
2.5 為數(shù)據(jù)表添加約束
• ForeignKeyConstraints屬性:保證兩個數(shù)據(jù)表之間對應(yīng)行改變時的關(guān)系
• UniqueConstraints屬性:保證某列數(shù)據(jù)在每行都不相同
• 在運行時為數(shù)據(jù)表添加約束
–添加外鍵約束:修改一個表的值看是否變化
–添加唯一鍵約束
2.6 為數(shù)據(jù)集添加關(guān)系
• Relations:定義數(shù)據(jù)表之間的關(guān)系,該集合中可以包含0個或者多個數(shù)據(jù)關(guān)系對象,每個對象表示
兩個表之間的關(guān)系
• 只有數(shù)據(jù)集的EnforeConstraints屬性設(shè)置為true時,DataRelation中建立的約束才會被強(qiáng)制執(zhí)行
• 為數(shù)據(jù)表添加數(shù)據(jù)關(guān)系(非類型數(shù)據(jù)集)
[參考代碼]
//添加唯一鍵
System.Data.UniqueConstraint uc = new UniqueConstraint("唯一鍵名稱",ds.Tables["master"].Columns["masterID"]);
//添加外鍵
System.Data.ForeignKeyConstraint fc = new ForeignKeyConstraint("外鍵名稱", "主表列", "從表列");
//添加關(guān)系
ds.Relations.Add("關(guān)系名","父表列","子表列");
//注意關(guān)系和外鍵的區(qū)別
if (ds.Relations.Count <= 0)
return ;
System.Data.DataRow dr = ds.Tables["master"].Rows[0];
System.Data.DataRow[] drArray = dr.GetChildRows(ds.Relations[0]);
//這里的區(qū)別在于 外鍵:如果主表列更新,則從表列都對應(yīng)更新
//關(guān)系:能夠從父表對應(yīng)的一列,獲取子表對應(yīng)的行集
2.7 顯示行狀態(tài)
• 數(shù)據(jù)行的RowState屬性反映了自數(shù)據(jù)表創(chuàng)建以來或者上次更新后在數(shù)據(jù)表上采取的操作
• DataRowState的取值
• 顯示狀態(tài)行
[參考代碼]
//顯示行狀態(tài)
DataRowState drs = ds.Tables["master"].Rows[0].RowState;
數(shù)據(jù)操作
3.1數(shù)據(jù)集方法
– 克隆數(shù)據(jù)集:只復(fù)制結(jié)構(gòu)
DataSet.Clone ();
– 復(fù)制數(shù)據(jù)集:復(fù)制結(jié)構(gòu)和數(shù)據(jù)
DataSet.Copy ();
3.2數(shù)據(jù)表方法
– Select方法:用于在運行時過濾數(shù)據(jù)表的行并進(jìn)行排序。它不對表的內(nèi)容作改動。該方法只是返回與指定的規(guī)則相匹配的行數(shù)組
//返回DataRow[]集合
DataSet.Tables["master"].Select(“條件”,”排序規(guī)則”);
數(shù)據(jù)集內(nèi)的篩選與排序
在填充數(shù)據(jù)集之后,通常會發(fā)現(xiàn)使用表中的不同記錄子集或以不同順序查看數(shù)據(jù)很有用??梢酝ㄟ^對數(shù)據(jù)集內(nèi)的數(shù)據(jù)進(jìn)行篩選和排序來實現(xiàn)這一點。若要簡化此過程,可以創(chuàng)建數(shù)據(jù)視圖,數(shù)據(jù)視圖提供可合并篩選器和排序條件的對象,可用作數(shù)據(jù)綁定的源
數(shù)據(jù)集內(nèi)的篩選與排序
可改用內(nèi)置的數(shù)據(jù)集功能來篩選和排序。有兩個選擇:
• 數(shù)據(jù)表支持Select 方法,您可調(diào)用該方法來篩選和排序。該方法并不更改表中記錄的內(nèi)容和順序,相反,它向您提供一個記錄列表(或數(shù)組)表示所指定的條件。
• 可以使用數(shù)據(jù)視圖(DataView 對象)。數(shù)據(jù)視圖是一個對象,它作為數(shù)據(jù)表之上的層,提供經(jīng)過篩選和排序后的表內(nèi)容視圖。(還可以使用數(shù)據(jù)視圖管理器,它的行為像數(shù)據(jù)視圖集合。)數(shù)據(jù)視圖類似于數(shù)據(jù)庫中的視圖,因為它不是數(shù)據(jù)的副本。相反,它只是查看表中數(shù)據(jù)的另一種方式。
4.1 數(shù)據(jù)視圖概述
• 數(shù)據(jù)視圖是位于數(shù)據(jù)表之上的獨立對象
• 數(shù)據(jù)視圖是對單一數(shù)據(jù)進(jìn)行過濾和排序后的視圖
• 可以用作綁定控件的數(shù)據(jù)源
• 可以為一個數(shù)據(jù)表創(chuàng)建多個數(shù)據(jù)視圖
• 視圖數(shù)據(jù)行實際引用了數(shù)據(jù)行的DataRowView對象
DataRowView的屬性
屬性
描述
DataView
該數(shù)據(jù)行視圖所屬的數(shù)據(jù)視圖
IsEdit
表示該數(shù)據(jù)行視圖是否正在被編輯
IsNew
表示該數(shù)據(jù)行視圖是否為新建
Item
該數(shù)據(jù)行視圖中某列的值
Row
正在被查看的數(shù)據(jù)行
RowVersion
該數(shù)據(jù)行視圖的當(dāng)前版本
4.2 創(chuàng)建數(shù)據(jù)視圖
• 在設(shè)計時創(chuàng)建
–創(chuàng)建類型化數(shù)據(jù)集
–從工具箱“數(shù)據(jù)”中選擇“DataView”控件
• 可以使用表的DefaultView 屬性來訪問該默認(rèn)數(shù)據(jù)視圖,該數(shù)據(jù)視圖返回一個
DataView 對象??稍谶\行時設(shè)置默認(rèn)數(shù)據(jù)視圖的屬性。
4.3 數(shù)據(jù)視圖的屬性
• 數(shù)據(jù)視圖屬性
– RowFilter
– RowStateFilter
– Sort
• 使用表的Select 方法或數(shù)據(jù)視圖的RowFilter 屬性,可以篩選數(shù)據(jù)表中的記錄以便僅使想操作的記錄可用。這在要操作數(shù)據(jù)集表中記錄的不同子集時很有用。若要指定篩選器條件,可以使用與創(chuàng)建列表達(dá)式所用語法相同的表達(dá)式語法。
[參考代碼]
//RowFilter判斷
string tempid = this.lbdid.Text.ToString();
bookView.RowFilter = "id= " + tempid + " ";
if (bookView.Count==1)
{
Response.Write("<script langusge= javascript >alert( 。。。 );</script>");
return;
}
//RowStateFilter判斷
DataView dwMain = (DataView)Session["cart"];
dwMain.RowFilter = this.tbCon.Text;
switch (ddlState.SelectItem.Value)
{
case "CurrentRows":
dwMain.RowFilter = DataViewRowState.CurrentRows;
break;