再議ASP.NET DataGrid控件中的“添加新行”功能_.Net教程
推薦:AJAX實(shí)現(xiàn)web頁(yè)面中級(jí)聯(lián)菜單的設(shè)計(jì) 看了大峽搞的級(jí)聯(lián)菜單,我也班門弄斧一把,嘿嘿,花了一點(diǎn)時(shí)間搞了個(gè)級(jí)聯(lián)菜單貼上來(lái)看看。本例中只要你選擇成員分類名稱就會(huì)自動(dòng)顯示成員名稱: 首先在eclipse中建一個(gè)項(xiàng)目,名稱你自
說(shuō)起在DataGrid中添加新行,ASP.NET開發(fā)的大牛人物:Dino Esposito,他的《構(gòu)建WEB解決方案--應(yīng)用ASP.NET和ADO.NET》一書中提供了和以上兩位類似的方法,但是Dino又加了些功能,首先就是”添加新行“這個(gè)LinkButton放在頁(yè)腳,同時(shí)這個(gè)LinkButton在分頁(yè)到最后一頁(yè)時(shí)才啟用,因?yàn)樵谄渌?yè)面添加新行是不可取的;其次是添加的行如果引起分頁(yè),就切換到新頁(yè)并進(jìn)入此行的編輯模式。
前一段時(shí)間,我也使用了這個(gè)功能,發(fā)現(xiàn)仍然存在兩個(gè)問(wèn)題:
1.點(diǎn)擊”添加新行“按鈕編輯新行時(shí),如果再次點(diǎn)擊”添加新行“的話,這個(gè)剛添加的新行會(huì)變成空白,編輯模式會(huì)進(jìn)入另外的新行。
2.在翻頁(yè)時(shí)DataGrid的EditItemIndex沒(méi)有恢復(fù)成-1,會(huì)造成其他頁(yè)面相同索引的行也進(jìn)入編輯模式。
于是就操刀稍稍修改了一下,解決了這兩個(gè)問(wèn)題,最終效果是這樣的:
圖一:不在最后一頁(yè)時(shí),添加新行按鈕不可用

圖二:在最后一頁(yè)時(shí),按鈕才可用

圖三:當(dāng)新加行進(jìn)入編輯模式后,按鈕再次不可點(diǎn)擊,取消后此新增行會(huì)刪除,恢復(fù)到圖二

頁(yè)腳模板中的LinkButton:
|
以下為引用的內(nèi)容: <FooterTemplate> |
頁(yè)面代碼中IsEnableAddNewRow方法代碼:
| 以下為引用的內(nèi)容: 1 protected bool IsEnableAddNewRow() 2 { 3 //只有最后一頁(yè)并不在編輯模式時(shí)才啟用添加新行功能 4 return (dgData.CurrentPageIndex == dgData.PageCount - 1&&dgData.EditItemIndex == -1); 5 } |
頁(yè)面代碼中ItemCommand事件代碼:
| 以下為引用的內(nèi)容: 1 private void dgData_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) 2 { 3 if(e.CommandName == "AddNewRow") 4 { 5 //先在數(shù)據(jù)源添加新行,如果有主鍵字段,還需要考慮主鍵字段的數(shù)據(jù)生成和最后更新時(shí)的提交 6 LoadData(); 7 DataRow newRow = dsData.Tables[0].NewRow(); 8 dsData.Tables[0].Rows.Add(newRow); 9 dgData.DataSource = dsData; 10 Session["myData"] = dsData; 11 //判斷添加此行后是否應(yīng)該換頁(yè) 12 int currentIndex = dgData.Items.Count; 13 if(currentIndex >= dgData.PageSize) 14 { 15 dgData.CurrentPageIndex ; 16 currentIndex = 0; 17 } 18 dgData.EditItemIndex = currentIndex; 19 dgData.DataBind(); 20 dgData.Items[currentIndex].Attributes.Add("IsNewItem","True"); 21 } 22 } |
CancelCommand事件代碼:
| 以下為引用的內(nèi)容: 1 private void dgData_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) 2 { 3 LoadData(); 4 //如果在新增行選擇取消,則拒絕添加此行 5 if(e.Item.Attributes["IsNewItem"] != null && e.Item.Attributes["IsNewItem"] == "True") 6 { 7 dsData.RejectChanges(); 8 Session["myData"] = dsData; 9 } 10 dgData.EditItemIndex = -1; 11 BindGrid(dgData.CurrentPageIndex); 12 } |
以上的例子我寫了一個(gè)Demo,打包好的解決方案文件可以在這里下載(注意修改Web.config文件中的連接字符串,數(shù)據(jù)訪問(wèn)代碼在DataAccess類中)。
在寫這篇Post的途中,有朋友建議在DataGrid的頁(yè)腳為每個(gè)字段放置一個(gè)文本框,然后再放置一個(gè)“添加此行”按鈕,點(diǎn)擊按鈕后即可將行添加到DataGrid中,如果頁(yè)腳沒(méi)有做其他用途的話,這種方式也不失為較好的解決方案。
分享:妙用ASP2.0中的URL映射改變網(wǎng)址 URL映射有什么用呢? 舉個(gè)比較實(shí)用的例子,比如你開發(fā)一個(gè)Blog網(wǎng)站, 每個(gè)Blog主頁(yè)的加載地址是 www.blog.com/Default.aspx?id=anckly Default頁(yè)通過(guò)id來(lái)
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 淺談ASP.NET開發(fā)下的MVC設(shè)計(jì)模式的實(shí)現(xiàn)
- 解析GridView中添加CheckBox并返回選中行
- ADO.NET實(shí)用經(jīng)驗(yàn)無(wú)保留曝光
- 關(guān)于IronPython和C#執(zhí)行速度對(duì)比
- asp.net使用存儲(chǔ)過(guò)程實(shí)現(xiàn)用戶登錄
- 看看一個(gè).net版對(duì)話框控件
- 用SQL語(yǔ)句修復(fù)SQL Server數(shù)據(jù)庫(kù)
- ASP.NET 2.0中CSS不正常的解決方法
- 淺析asp.net 和 access 聯(lián)合開發(fā)的分頁(yè)類
- 實(shí)現(xiàn).NET應(yīng)用程序的自動(dòng)更新
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-再議ASP.NET DataGrid控件中的“添加新行”功能
。
