2011-03-02 197 views
0

我之前發佈過類似的問題,但我仍然有一些問題。我使用asp.net 4和c#。GridView在編輯模式行

請幫我理解當用戶單擊單行的EDIT按鈕時,我需要更改Label uxTest的TEXT。

有什麼想法?再次感謝球員,並抱歉,如果看起來像一個重複的問題。


 <%@ Page Language="C#" %> 
    <%@ Import Namespace="System.Data" %> 

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

    <script runat="server"> 

     protected void Page_Load(object sender, EventArgs e) 
     { 

     if (!Page.IsPostBack) 
     { 
      // Create a new table. 
      DataTable taskTable = new DataTable("TaskList"); 

      // Create the columns. 
      taskTable.Columns.Add("Id", typeof(int)); 
      taskTable.Columns.Add("Description", typeof(string)); 
      taskTable.Columns.Add("IsComplete", typeof(bool)); 

      //Add data to the new table. 
      for (int i = 0; i < 20; i++) 
      { 
      DataRow tableRow = taskTable.NewRow(); 
      tableRow["Id"] = i; 
      tableRow["Description"] = "Task " + i.ToString(); 
      tableRow["IsComplete"] = false;    
      taskTable.Rows.Add(tableRow); 
      } 

      //Persist the table in the Session object. 
      Session["TaskTable"] = taskTable; 

      //Bind data to the GridView control. 
      BindData(); 
     } 

     } 

     protected void TaskGridView_PageIndexChanging(object sender, GridViewPageEventArgs e) 
     { 
     TaskGridView.PageIndex = e.NewPageIndex; 
     //Bind data to the GridView control. 
     BindData(); 
     } 

     protected void TaskGridView_RowEditing(object sender, GridViewEditEventArgs e) 
     { 
     //Set the edit index. 
     TaskGridView.EditIndex = e.NewEditIndex; 
     //Bind data to the GridView control. 
     BindData(); 
     } 

     protected void TaskGridView_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
     { 
     //Reset the edit index. 
     TaskGridView.EditIndex = -1; 
     //Bind data to the GridView control. 
     BindData(); 
     } 

     protected void TaskGridView_RowUpdating(object sender, GridViewUpdateEventArgs e) 
     {  
     //Retrieve the table from the session object. 
     DataTable dt = (DataTable)Session["TaskTable"]; 

     //Update the values. 
     GridViewRow row = TaskGridView.Rows[e.RowIndex]; 
     dt.Rows[row.DataItemIndex]["Id"] = ((TextBox)(row.Cells[1].Controls[0])).Text; 
     dt.Rows[row.DataItemIndex]["Description"] = ((TextBox)(row.Cells[2].Controls[0])).Text; 
     dt.Rows[row.DataItemIndex]["IsComplete"] = ((CheckBox)(row.Cells[3].Controls[0])).Checked; 

     //Reset the edit index. 
     TaskGridView.EditIndex = -1; 

     //Bind data to the GridView control. 
     BindData(); 
     } 

     private void BindData() 
     { 
     TaskGridView.DataSource = Session["TaskTable"]; 
     TaskGridView.DataBind(); 
     } 
    </script> 

    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head id="Head1" runat="server"> 
     <title>GridView example</title> 
    </head> 
    <body> 
     <form id="form1" runat="server"> 
     <div> 

      <asp:GridView ID="TaskGridView" runat="server" 
      AutoGenerateEditButton="True" 
      AllowPaging="True" 
      OnRowEditing="TaskGridView_RowEditing"   
      OnRowCancelingEdit="TaskGridView_RowCancelingEdit" 
      OnRowUpdating="TaskGridView_RowUpdating" 
      OnPageIndexChanging="TaskGridView_PageIndexChanging" 
       AutoGenerateColumns="False"> 
       <Columns> 
        <asp:TemplateField> 
        <EditItemTemplate> 
         <asp:Label ID="uxTest" runat="server" Text="TEST"></asp:Label> 
        </EditItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 

     </div> 
     </form> 
    </body> 
    </html> 

代碼解決方案:

if (e.Row.RowType == DataControlRowType.DataRow && 
        (e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit){ 
Label dl = (Label)e.Row.FindControl("uxLblTest");// Retrive control here 
} 
+0

爲什麼不編輯您之前的問題然後......或至少給我們的鏈接? – 2011-03-02 16:16:41

+0

對不起,我沒有想過,現在我做到了。請試試這個代碼。我幾乎花了兩天的時間,但沒辦法能夠得到這個標籤。有任何想法嗎?非常感謝 – GibboK 2011-03-02 16:19:53

+0

我感到沮喪,但是您可以嘗試減少代碼量嗎? – 2011-03-02 17:41:51

回答

1

爲什麼你需要去改變它,你的ItemTemplate和EditItemTemplate裏可以有完全不同的數據/控制。在下面,我爲項目/編輯模板顯示了2個不同的標籤(請參閱ID)。您可以隨意更改,但這是具有不同查看/編輯模式的基本方法。

  <asp:TemplateField HeaderText="Test Column"> 
       <ItemTemplate> 
        <asp:Label ID="uxTest" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.TestColumn") %>'> 
        </asp:Label> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:Label ID="uxTestEditMode" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.TestColumn") %>'> 
        </asp:TextBox> 
       </EditItemTemplate> 
      </asp:TemplateField>