Сохраняются данные полей шаблона вида сетки Asp.net
У меня есть вид сетки, который содержит 4 поля шаблона, каждое из которых содержит текстовое поле. Теперь я связал эти поля шаблона с источником данных. Когда я, как пользователь, ввожу некоторые данные в текстовое поле и нажимаю кнопку сохранения (кнопка, которая не является частью grid view, а является отдельной частью веб-формы), я не могу получить значения в обработчике события click в коде позади файла. Пожалуйста, помогите мне.
файл 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
}
}
1 ответ
Вам нужно перебрать 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();
}
}