2016-07-05 38 views
0

我有一個網格視圖,其中包含4個模板字段,每個包含一個文本框。 現在我已經用數據源綁定了這些模板字段。當我作爲用戶在文本框中鍵入一些數據,然後單擊保存按鈕(一個按鈕不是gridview的一部分,而是webform中的一個按鈕),我無法獲取click事件處理程序中的值在代碼後面的文件。請幫幫我。Asp.net網格視圖模板字段數據持久

aspx文件

<asp:TemplateField HeaderText="col1"> 
 
    <ControlStyle Height="25px" Width="60px" /> 
 
     <ItemTemplate> 
 
      <asp:TextBox ID="txt1" runat="server" Text='<%# Bind("[col1]") %>'> 
 
      </asp:TextBox>     
 
     </ItemTemplate> 
 
    </asp:TemplateField> 
 
    
 
<asp:TemplateField HeaderText="col2"> 
 
    <ControlStyle Height="25px" Width="60px" /> 
 
    <ItemTemplate> 
 
     <asp:TextBox ID="txt2" runat="server" Text='<%# Bind("[col2]") %>'> 
 
     </asp:TextBox> 
 
    </ItemTemplate> 
 
</asp:TemplateField> 
 
    
 
<asp:TemplateField HeaderText="col3"> 
 
    <ControlStyle Height="25px" Width="60px" /> 
 
    <ItemTemplate> 
 
     <asp:TextBox ID="txt3" runat="server" Text='<%# Bind("[col3]") %>'> 
 
     </asp:TextBox> 
 
    </ItemTemplate> 
 
</asp:TemplateField> 
 
    
 
<asp:TemplateField HeaderText="col4"> 
 
    <ControlStyle Height="25px" Width="60px" /> 
 
    <ItemTemplate> 
 
     <asp:TextBox ID="txt4" runat="server" Text='<%# Bind("[col4]") %>'> 
 
     </asp:TextBox> 
 
    </ItemTemplate>  
 
</asp:TemplateField>

代碼隱藏文件

protected void ButtonAdd_Click(object sender, EventArgs e) 
{ 

    foreach (GridViewRow row in gvEdit.Rows) 
    { 



      string a = ((TextBox)row.FindControl("col1")).Text; 
       //above line gives a null value 


    } 
} 
+2

您可能還需要添加您的HTML以及 – techspider

回答

0

您通過GridViewRowCollection需要循環,然後對每一行,找到了Id你控制在標記中給它。例如:

protected void ButtonAdd_Click(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in gvEdit.Rows) 
    { 
     var txt1 = row.FindControl("txt1") as TextBox; 
     var txt2 = row.FindControl("txt2") as TextBox; 
     var txt3 = row.FindControl("txt3") as TextBox; 
     var txt4 = row.FindControl("txt4") as TextBox; 

     // access the Text property of each, e.g. txt1.Text 
    } 
} 

更新:確保當你的數據源綁定,它只是發生在最初的負載,而不是隨後的回傳,否則你的變化將是,每次重置。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     GridView1.DataSource = // data source 
     GridView1.DataBind(); 
    } 
} 
+0

Nop。它不起作用。如果我提供數據源的值,則返回相同的值,但是如果我在文本框中修改數據(作爲用戶),它僅在數據源中返回數據 – user3107338

+0

@ user3107338我還沒有看到數據綁定邏輯,確保它只發生在初始負載。查看更新的答案。 –

+0

哇。忘了把這個後置條件。感謝lottttttt建議。 – user3107338