2016-07-05 7 views
0

У меня есть вид сетки, который содержит 4 поля шаблона, каждый из которых содержит текстовое поле. Теперь я связал эти поля шаблонов с источником данных. Когда я как пользователь набираю некоторые данные в текстовом поле и нажимаю кнопку «Сохранить» (кнопка, которая не является частью gridview, а отдельная в веб-форме), я не могу получить значения в обработчике событий кликов в коде за файлом. Пожалуйста, помогите мне.Asp.net grid view template fields data persist

файл 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 
    } 
} 

Update: Убедитесь, что когда вы делаете привязки источника данных, это происходит только на начальной загрузки, а не последующие постбэки, в противном случае ваши изменения будут сброшены каждый раз.

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

Nop. Это не работает. если я предоставляю значения из источника данных, то такое же значение возвращается, но если я изменяю dat в текстовом поле (как пользователь), он возвращает данные только в источнике данных – user3107338

+0

@ user3107338 Я не видел логику привязки данных, но делаю уверен, что это происходит только при начальной загрузке. См. Обновленный ответ. –

+0

ничего себе. забыл поставить это состояние обратной связи. Спасибо lottttttt за предложение. – user3107338