从asp.net gridview模板列内的复选框获取数据
这似乎很简单,但我似乎想不出来!我正在尝试使双向数据绑定在ASP.net页面上工作,并将复选框作为列之一。如何从gridview获取更新的值(从复选框中) 以下是我的数据类型:从asp.net gridview模板列内的复选框获取数据,asp.net,data-binding,gridview,Asp.net,Data Binding,Gridview,这似乎很简单,但我似乎想不出来!我正在尝试使双向数据绑定在ASP.net页面上工作,并将复选框作为列之一。如何从gridview获取更新的值(从复选框中) 以下是我的数据类型: [Serializable] public class UserRequirements { public string FirstName { get; set; } public string LastName { get; set; } public string UserId { get
[Serializable]
public class UserRequirements
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserId { get; set; }
public string Email { get; set; }
public bool ThingRequired { get; set; }
}
我的标记如下所示:
<form id="form1" method="post" runat="server" >
<asp:GridView ID="UserTable" runat="server" AutoGenerateColumns="false" >
<Columns>
...
<asp:TemplateField HeaderText="Required ?">
<ItemTemplate>
<asp:CheckBox id="chkBox1" runat="server" on
Text ="Required"
checked='<%# DataBinder.Eval(Container.DataItem,"ThingRequired") %>'>
</asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button id="thebutton" Text="Save Changes" OnClick="UpdateRequirements" runat="server" CausesValidation=false />
</form>
List<UserRequirements > _userList = new List<UserRequirements >();
protected void Page_Load(object sender, EventArgs e)
{
_userList = data_layer.GetUserRequirments();
this.UserTable.DataSource = _userList;
this.UserTable.DataBind();
}
<asp:CheckBox ID="<%# Eval('Id') %>" />
foreach (UserRequirement item in Requirements)
{
Control c = grid.FindControl(item.Id);
CheckBox cbx = c as CheckBox;
if (cbx != null)
{
bool value = cbx.Checked;
//update db
}
}
foreach(GridView1.Rows中的GridViewRow di)
{
HtmlInputCheckBox chkBx=(HtmlInputCheckBox)di.FindControl(“chkBox1”)
尝试以下操作以获取更改时的值:
protected void OnCheckedChanged(object sender, EventArgs e)
{
CheckBox c = (CheckBox)sender as CheckBox;
string checkBoxId = c.ID;
bool checkBoxValue = c.Checked;
//update database
}
[编辑]
如果希望一次性从网格中的行中获取所有值,则需要使用UserRequirements列表中的行或项的Id绑定复选框,因此在网格中执行以下操作:
<form id="form1" method="post" runat="server" >
<asp:GridView ID="UserTable" runat="server" AutoGenerateColumns="false" >
<Columns>
...
<asp:TemplateField HeaderText="Required ?">
<ItemTemplate>
<asp:CheckBox id="chkBox1" runat="server" on
Text ="Required"
checked='<%# DataBinder.Eval(Container.DataItem,"ThingRequired") %>'>
</asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button id="thebutton" Text="Save Changes" OnClick="UpdateRequirements" runat="server" CausesValidation=false />
</form>
List<UserRequirements > _userList = new List<UserRequirements >();
protected void Page_Load(object sender, EventArgs e)
{
_userList = data_layer.GetUserRequirments();
this.UserTable.DataSource = _userList;
this.UserTable.DataBind();
}
<asp:CheckBox ID="<%# Eval('Id') %>" />
foreach (UserRequirement item in Requirements)
{
Control c = grid.FindControl(item.Id);
CheckBox cbx = c as CheckBox;
if (cbx != null)
{
bool value = cbx.Checked;
//update db
}
}
注意:您可能需要递归使用FindControl来搜索子控件,或者对网格中的每个GridViewRow对象执行foreach以选中您要查找的复选框。我认为这种方法效果最好。如果希望在选中复选框后立即更新值,请记住将复选框的AutoPostBack属性设置为“True”。