原文:http://www.c-sharpcorner.com/asp/Code/northwindLC.asp
這篇文章主要介紹如何在DataGrid控件中實(shí)現(xiàn)編輯、刪除、分類以及分頁(yè)操作。為了實(shí)現(xiàn)我們的意圖,我們使用SqlServer2000自帶的NorthWind數(shù)據(jù)庫(kù)。程序分為兩部分: 1.包含HTML代碼的.ASPX文件 2.包含所有邏輯及方法的后臺(tái)C#類文件 代碼: ASPX文件: 在這里我們?cè)O(shè)計(jì)了一個(gè)DataGrid對(duì)象,我為一些屬性和方法作了注解。它就變得如此的簡(jiǎn)單: 代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝] 你看,是不是不難?關(guān)鍵在于我們常動(dòng)手動(dòng)腦。多看資料也很關(guān)鍵哦! C#后臺(tái)程序: 讓我們先看一段程序: private void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) { BindGrid(); } } 上面展現(xiàn)的是一種非常好的技術(shù),當(dāng)頁(yè)面不是PostBack狀態(tài)時(shí),就綁定數(shù)據(jù)。這意味著,一旦頁(yè)面被請(qǐng)求數(shù)據(jù)將被綁定。 繼續(xù)看程序: 代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝]
這段代碼執(zhí)行給定的SQL語(yǔ)句訪問數(shù)據(jù)庫(kù),私有函數(shù)GetProductData返回一個(gè)包含數(shù)據(jù)記錄的DataSet。下一步,讓我們看如何編輯記錄: 代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝]通過上面代碼所附帶的注解大家也能明白MyDataGrid_Edit函數(shù)的功能:當(dāng)用戶點(diǎn)擊Edit按鈕時(shí)激活MyDataGrid_Edit函數(shù),并且程序找到所要編輯的記錄的索引,把該索引號(hào)分配給DataGrid的EditItemIndex屬性。 如果用戶點(diǎn)擊Cancel按鈕,將調(diào)用我們?cè)谏厦娴?aspx文件中提到的MyDataGrid_Cancel函數(shù),程序如果分配給DataGrid屬性 EditItemIndex的值為-1,就意味著用戶沒有選擇Edit,程序如下: 代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝]
下面的代碼像我們展現(xiàn)了如何從DataGrid中刪除一條選中的記錄。我們知道Web控件DataGrid有一DataKeyField屬性,事實(shí)上它就包含了每條記錄的ProductID字段值。您一定會(huì)問如何通過DataKeyField屬性得到DataGrid中選中記錄的ProductID值呢?下面這段代碼會(huì)讓您釋然的: 代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝]
下面的代碼用來(lái)更新NorthWind數(shù)據(jù)庫(kù)的產(chǎn)品信息, 我們可以使用下面這項(xiàng)技術(shù)檢索值: ------------------- bool Discon=((CheckBox)E.Item.FindControl("Discontinued")).Checked; ------------------- 這時(shí)我們使用FinControl()方法就能得到Discontinued CheckBox的值. 代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝] 接下來(lái)的BindGrid()調(diào)用私有函數(shù)GetProductData取得DataSet對(duì)象并綁定到DataGrid控件。 /// <summary> /// 接受數(shù)據(jù)庫(kù)數(shù)據(jù)并再次綁定 /// </summary> protected void BindGrid() { MyDataGrid.DataSource=GetProductData().Tables["Products"].DefaultView; MyDataGrid.DataBind(); } 用戶在DataGrid中向前或向后移動(dòng)時(shí)激活MyDataGrid_PageIndexChanged事件,因?yàn)镈ataGrid 不能自動(dòng)的獲取新頁(yè)的索引號(hào),所以我們只能手動(dòng)取得索引號(hào)。 /// <summary> /// 分頁(yè)操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void MyDataGrid_PageIndexChanged(object source, DataGridPageChangedEventArgs e) { MyDataGrid.CurrentPageIndex=e.NewPageIndex; BindGrid(); } 用戶在任何時(shí)候想對(duì)數(shù)據(jù)分類時(shí),就激活下面的Sort_Grid事件。例如,如果用戶點(diǎn)擊field headers,事件就將被激活,并且把數(shù)據(jù)分成我們想要的分類。 我們需要DataView對(duì)象去為e.SortExpression.ToString()方法分類,返回的是被點(diǎn)擊域標(biāo)題的分類。 /// <summary> /// 分類 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Sort_Grid(Object sender, DataGridSortCommandEventArgs e) { DataView dv= new DataView(GetProductData().Tables["Products"]); dv.Sort= e.SortExpression.ToString(); MyDataGrid.DataSource=dv; MyDataGrid.DataBind(); }
出處:
責(zé)任編輯:藍(lán)色
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|