我整天都在和这个问题作斗争。我有一个asp:Gridview
有几个页脚模板,有几个TextBox字段,一个DropDown和一个CheckBox。我隐藏页脚,直到单击添加记录asp:button
。一切正常,我可以在文本框中输入数据,从下拉菜单中选择选举并循环复选框。现在,当我尝试将数据保存到数据库时,我使用此代码。
protected void MembersGridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals("EmptyInsert"))
{
}
if (e.CommandName.Equals("Insert"))
{
int Role =Convert.ToInt32((MembersGridView.FooterRow.FindControl("ddlRole") as DropDownList).SelectedItem.Value);
string FirstName = (MembersGridView.FooterRow.FindControl("txtLastName") as TextBox).Text;
string LastName = (MembersGridView.FooterRow.FindControl("txtLastName") as TextBox).Text;
TextBox UserName = MembersGridView.FooterRow.FindControl("txtUserName") as TextBox;
TextBox Email = MembersGridView.FooterRow.FindControl("txtEmail") as TextBox;
CheckBox active = MembersGridView.FooterRow.FindControl("chkActive") as CheckBox;
DbContext.AAHMembersAdd(Role, FirstName, LastName, UserName.Text, Email.Text, active.Checked);
//MembersGridView.EditIndex = -1;
MembersGridView.DataSource = DbContext.VW_Members.ToList();
DataBind();
}
}
<asp:TemplateField HeaderText="First Name" ItemStyle-Width="100">
<ItemTemplate>
<asp:Label ID="lblFirstName" runat="server" Text='<%# Eval("firstname")%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtFirstName" runat="server" Text='<%# Eval("firstname")%>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
我已经为其中一个模板字段添加了aspx,除了下拉菜单和CheckBox
外,它们都与此相同返回DropDown和CheckBox数据,但我的所有TextBox值都以空字符串形式返回。我在这里想念的是什么正如你所看到的,我已经尝试了几种不同的方法,但结果是一样的。
答案 0 :(得分:0)
从我所看到的;您没有将文本设置为任何内容 - 因此textbox.text值是一个空字符串。尝试更改此代码:
<FooterTemplate> <asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox> </FooterTemplate>
到此:
<FooterTemplate> <asp:TextBox ID="txtFirstName" text="hello" runat="server"></asp:TextBox> </FooterTemplate>
也改变了这个:
string FirstName = (MembersGridView.FooterRow.FindControl("txtLastName") as TextBox).Text;
到此:
string FirstName = (MembersGridView.FooterRow.FindControl("txtFirstName") as TextBox).Text;