国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

再議ASP.NET DataGrid控件中的“添加新行”功能_.Net教程

2024-07-10 12:49:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

推薦: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開(kāi)發(fā)的大牛人物:Dino Esposito,他的《構(gòu)建WEB解決方案--應(yīng)用ASP.NET和ADO.NET》一書(shū)中提供了和以上兩位類似的方法,但是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>
<asp:LinkButton id=lbAddNewRow runat="server" CommandName="AddNewRow" Enabled="<%# IsEnableAddNewRow() %>">添加新行</asp:LinkButton>
</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 }

  以上的例子我寫(xiě)了一個(gè)Demo,打包好的解決方案文件可以在這里下載(注意修改Web.config文件中的連接字符串,數(shù)據(jù)訪問(wèn)代碼在DataAccess類中)。

  在寫(xiě)這篇Post的途中,有朋友建議在DataGrid的頁(yè)腳為每個(gè)字段放置一個(gè)文本框,然后再放置一個(gè)“添加此行”按鈕,點(diǎn)擊按鈕后即可將行添加到DataGrid中,如果頁(yè)腳沒(méi)有做其他用途的話,這種方式也不失為較好的解決方案。

分享:妙用ASP2.0中的URL映射改變網(wǎng)址
  URL映射有什么用呢?     舉個(gè)比較實(shí)用的例子,比如你開(kāi)發(fā)一個(gè)Blog網(wǎng)站, 每個(gè)Blog主頁(yè)的加載地址是     www.blog.com/Default.aspx?id=anckly      Default頁(yè)通過(guò)id來(lái)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 寿阳县| 藁城市| 南漳县| 台东市| 龙胜| 长汀县| 洱源县| 柏乡县| 平阴县| 莒南县| 沁阳市| 新巴尔虎右旗| 锦州市| 兴宁市| 青岛市| 牟定县| 屏东市| 米林县| 吉隆县| 罗田县| 仙桃市| 鄢陵县| 民勤县| 临澧县| 高要市| 五原县| 土默特左旗| 招远市| 开封市| 德州市| 绥阳县| 八宿县| 张北县| 曲沃县| 含山县| 皮山县| 普定县| 磴口县| 高青县| 濮阳县| 名山县|