2011-07-11 62 views
3

我正在使用gridview。當我點擊編輯按鈕時,出現更新和取消按鈕。 在修改EditItemTemplate中的文本框中的值後,新值不會顯示在事件處理函數rowupdating()中,而是獲取頁面呈現時出現的值。如何從這些文本框中獲取新值並繼續? 這是代碼。爲什麼GridView Rowupdating事件不捕獲文本框的新值?

<asp:GridView ID="GridView1" runat="server" AutoGenerateEditButton="true" AutoGenerateColumns="false" 
     AutoGenerateDeleteButton="true" onrowediting="GridView1_RowEditing" 
     onrowupdating="GridView1_RowUpdating"> 
    <Columns> 


    <asp:TemplateField> 
    <ItemTemplate> 
     <asp:Label ID="lblId" runat="server" Text='<%# Eval("id") %>'></asp:Label> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <asp:TextBox ID="txtId" runat="server" Text='<%# Eval("id") %>'></asp:TextBox> 
    </EditItemTemplate> 
    </asp:TemplateField> 

    <asp:TemplateField> 
    <ItemTemplate> 
     <asp:Label ID="lblName" runat="server" Text='<%# Eval("cpuname") %>'></asp:Label> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <asp:TextBox ID="txtName" runat="server" Text='<%# Eval("cpuname") %>'></asp:TextBox> 
    </EditItemTemplate> 
    </asp:TemplateField> 

    <asp:TemplateField> 
    <ItemTemplate> 
     <asp:Label ID="lblStatus" runat="server" Text='<%# Eval("status") %>'></asp:Label> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <asp:TextBox ID="txtStatus" runat="server" Text='<%# Eval("status") %>'></asp:TextBox> 
    </EditItemTemplate> 
    </asp:TemplateField> 

    </Columns> 


</asp:GridView> 


protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
     { 
      GridView1.EditIndex = e.NewEditIndex; 
     } 

     protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
     { 
      TextBox text = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtName"); 
     } 
+0

如果(!的IsPostBack)BindDataGrid()工作正常 –

回答

4

您應該在這裏使用雙向綁定。即綁定的,而不是評估和演示:

<asp:TextBox ID="txtId" runat="server" Text='<%# Bind("id") %>'></asp:TextBox> 

這裏是鏈接到文件:

Data-Binding Expressions Overview

這裏是我的代碼背後:

protected void Page_Load(object sender, EventArgs e) 
    { 
     DataTable table = new DataTable(); 
     table.Columns.Add("Data"); 
     for(int i = 0; i < 20; i++) 
      table.Rows.Add(new object[] { i }); 
     GridView1.DataSource = table; 
    if(!IsPostBack) // <<<<<<<<<<<< 
     GridView1.DataBind(); 
    } 
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     GridView1.EditIndex = e.NewEditIndex; 
     GridView1.DataBind(); 
    }  

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     TextBox text = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtId"); 
    } 
+0

都能跟得上將if(!IsPostBack)以前databind(), 並插入GridView1.DataBind();GridView1.EditIndex = e.NewEditIndex;後。我試過這個。它沒有幫助。我仍然得到了呈現的值,而不是修改後的值 –

+0

您使用的是哪個版本的.net框架? – platon

+0

.Net 4.:).....我已經嘗試了很多,現在我陷入了大約12小時的困境。我不知道什麼是錯的。只是toooo好奇,知道我到底做錯了什麼 –

0

試試這個

TextBox text = (TextBox)GridView1.Rows[e.EditIndex].FindControl("txtName");

1

如果你寫的代碼綁定在頁面加載電網確保它被封閉在if(!IsPostBack) 我希望它幫

0

這結束了對我的工作。

protected void MyGridView_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    string value = e.NewValues[0].ToString(); 
    // ... 
} 
-1

我跟着柏拉圖,它的工作!

GridView1_RowEditing

相關問題