Asp.net 在网格中始终将复选框设置为false
我在网格中有复选框。我试图从codebehind访问它们,并获取选中/未选中行的数据。但即使选中复选框,我也会将它们作为checked属性获取,仅作为false: Aspx:Asp.net 在网格中始终将复选框设置为false,asp.net,gridview,checkbox,Asp.net,Gridview,Checkbox,我在网格中有复选框。我试图从codebehind访问它们,并获取选中/未选中行的数据。但即使选中复选框,我也会将它们作为checked属性获取,仅作为false: Aspx: 我没有发现问题。我也正确地对控件进行了设计。我假设您总是对GridView进行数据绑定,而不仅仅是如果(!Page.IsPostBack)… 所以把它放到page\u load protected void Page_Load(object sender, EventArgs e) {
我没有发现问题。我也正确地对控件进行了设计。我假设您总是对GridView进行数据绑定,而不仅仅是
如果(!Page.IsPostBack)…
所以把它放到page\u load
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
DataBindControls(); // like GridView etc.
}
}
如果使用
DataBind
控件,它们将丢失更改和视图状态。即使是事件也不会触发。因此,只有在第一次加载时才应该这样做。下面是一个在gridview中填充复选框并通过单击按钮获取值的简单示例
Default.aspx
<asp:GridView ID="gv"
runat="server"
AutoGenerateColumns="false"
OnRowDataBound="gv_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkReq" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:Button ID="btnSubmit"
runat="server"
OnClick="btnSubmit_Click"
Text="Submit" />
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Create 20 rows
gv.DataSource = Enumerable.Range(1, 20);
gv.DataBind();
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
var isCheckedList = new List<bool>();
for(var index = 0; index < gv.Rows.Count; ++index)
{
var chkReq = (CheckBox)gv.Rows[index].FindControl("chkReq");
isCheckedList.Add(chkReq.Checked);
}
//Look at isCheckedList to get a list of current values.
System.Diagnostics.Debugger.Break();
}
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var index = e.Row.RowIndex;
//Strongly Bind Controls
var chkReq = (CheckBox)e.Row.FindControl("chkReq");
chkReq.Text = "Item " + index.ToString();
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
//创建20行
gv.DataSource=可枚举范围(1,20);
gv.DataBind();
}
}
受保护的void btnsupmit\u单击(对象发送者,事件参数e)
{
var isCheckedList=新列表();
对于(变量索引=0;索引
因为您没有显示所有代码,所以可能是Tim Schmelter所说的问题,也可能是其他问题。此示例为您提供了从网格视图检索复选框值所需的基本知识。Oh yes..我在页面加载和回发检查中调用了它..我现在得到了真实值。谢谢..让我继续,看看功能是否正常..谢谢,汉克斯,完全忘记了这一点。。。当你尝试获取它们时,你帮我节省了数小时的调试时间?参加什么活动?
<asp:GridView ID="gv"
runat="server"
AutoGenerateColumns="false"
OnRowDataBound="gv_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkReq" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:Button ID="btnSubmit"
runat="server"
OnClick="btnSubmit_Click"
Text="Submit" />
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Create 20 rows
gv.DataSource = Enumerable.Range(1, 20);
gv.DataBind();
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
var isCheckedList = new List<bool>();
for(var index = 0; index < gv.Rows.Count; ++index)
{
var chkReq = (CheckBox)gv.Rows[index].FindControl("chkReq");
isCheckedList.Add(chkReq.Checked);
}
//Look at isCheckedList to get a list of current values.
System.Diagnostics.Debugger.Break();
}
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var index = e.Row.RowIndex;
//Strongly Bind Controls
var chkReq = (CheckBox)e.Row.FindControl("chkReq");
chkReq.Text = "Item " + index.ToString();
}
}