2010-01-12 18 views
1

我正在處理一段代碼,此時使用舊式DataGrid允許用戶在表格中輸入信息。它已經有一個添加和刪除按鈕。目前,用戶將信息輸入到頁腳中的3個文本框中,其他行使用標籤來顯示信息。在ASP.Net中編輯數據網格的行VB.Net

本質上我想要做的就是用戶點擊編輯按鈕的行,並將文本從那裏移動到頁腳(刪除顯示的行),以便用戶可以製作更改,然後再次單擊添加按鈕。目前我已經嘗試使用FindControls來查找文本框並設置文本,但它不喜歡它。有任何想法嗎?

回答

0

有幾件事需要澄清 - 是指舊的.NET「DataGrid」控件還是較新的「GridView」控件。此外,這是一個網絡或WinForms應用程序?

我的建議 -

您是否嘗試過以編程方式添加並通過操縱GridView1_RowEditing事件中設置TextBox控件?

要刪除已編輯的行,請將其從數據源中移除並重新綁定網格。

list.Remove(itemToRemove); 
GridView1.DataSource = list; 
GridView1.DataBind(); 

然後,從itemToRemove中獲取數據並使用它以編程方式在頁腳中創建和設置文本框。

如果您的數據網格的第三列被稱爲「名稱」和包含名稱的數據,您將創建並設置第三列的頁腳行文本框的值這樣的 -

GridView1.FooterRow.Cells[2].Controls.Add(new TextBox { ID = "tbName", Text = item.Name }); 
0

你是如何使用FindControl的?它總是有助於發佈您的代碼;)

您應該能夠在頁腳行上執行FindControl()並獲取沒有問題的文本框。

GridViewRow row = GridView1.FooterRow; 
TextBox txt1 = ((TextBox)row.FindControl,"TextBox1")); 
+0

感謝您的答覆。不幸的是,我找不到一種方法來直接訪問數據網格的行(我無法創建DataGridRow對象),但是我找到了一個解決方案,我將在下面發佈。 – 2010-01-13 00:41:24

0

基本上我改變了原來計劃的東西。相反,從該行的文本移動到頁腳文本框,並刪除該行的我代替EditCommandColumn創建像這樣

<asp:EditCommandColumn ButtonType="LinkButton" ItemStyle-ForeColor="Blue" EditText='[edit]' UpdateText='[update]' CancelText='[cancel]'></asp:EditCommandColumn> 

鏈接按鈕我也不得不EditItemTemplate裏添加到每個列,在每一個文本框,並將數據綁定到文本框,方法與綁定到ItemTemplates中的標籤的方式相同。

然後使用ItemCommand事件處理程序我添加了一些代碼,將EditItemIndex設置爲正在編輯的行。

Private Sub GoodsList_ItemCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dgdGoods.ItemCommand 

    Select Case e.CommandName 


     Case "Edit" 

      dgdGoods.EditItemIndex = e.Item.ItemIndex 

     Case "Cancel" 

      dgdGoods.EditItemIndex = -1 

     Case "Update" 

      dgdGoods.EditItemIndex = -1 
      'Update details here 

然後,在此重新綁定數據到數據網格結束。使用EditCommandColumn,它將自動從顯示編輯按鈕變爲顯示正在編輯的行上的更新和取消按鈕。