我在第一列上有一个带有复选框的GridView
:
<asp:GridView ID="dgNumeradores" runat="server" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="ItemID">
<Columns>
<asp:TemplateField HeaderText="Seleccionar">
<ItemTemplate>
<asp:CheckBox runat="server" ID="chkChecked" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Item" DataField="Description">
</asp:BoundField>
<asp:BoundField HeaderText="Plantilla" DataField="Template">
</asp:BoundField>
</Columns>
</asp:GridView>
现在在后面的代码中,我尝试更新DataTable上的 Checked 列,作为GridView的数据源(因为,如上所示,Checkbox列未绑定到数据源你可能知道的原因。):
Protected Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
Try
For Each dr As GridViewRow In Me.dgNumeradores.Rows
Me.itemsNumTable.Select("ItemID = '" & dgNumeradores.DataKeys(dr.RowIndex).Value & "'")(0)("Checked") = DirectCast(dr.Cells(0).FindControl("chkChecked"), CheckBox).Checked
Next
'Some more unimportant-for-this-question code
Catch ex As Exception
tableInfo.ShowError(ex.Message)
End Try
End Sub
问题是Checkbox.Checked
总是返回False
。
如何在此方案中获取Checkbox的已检查状态?或者更新上述专栏的最佳方法是什么?
P.S。请注意,单击复选框不会回发。在用户点击Save
之前,页面上没有任何内容发生(这是预期的行为)。
答案 0 :(得分:8)
您是否在页面加载中绑定了GridView?如果是这种情况,请使用IsPostBack
IF Not IsPostBack Then
DataBind()
End IF
答案 1 :(得分:2)
您是否应将AutoPostback属性设置为true?
<asp:CheckBox runat="server" ID="chkChecked" AutoPostback="true" />
答案 2 :(得分:0)
我的GridView中有两列。第一列包含文件名, 第二列包含复选框。一旦用户选择了任意一个 然后通过单击所选文件的按钮来复选框的数量 下载。
我的标记如下
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="Available Schemas"
DataField="SchemaFileName"
SortExpression="UserId">
</asp:BoundField>
<asp:TemplateField HeaderText="Select Schema">
<ItemTemplate>
<asp:CheckBox runat="server" ID="SelectedFiles" checked= '<%# Eval("checkValue") %>'/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
我的CodeBehind部分如下
protected void Page_Load(object sender, EventArgs e)
{
GenerateDownloadLinks();
if (!IsPostBack)
{
GridView1.DataSource = listOfData;
GridView1.DataBind();
}
}
listOfData填充在GenerateDownloadLinks()中,然后绑定到GridView1。
用户选择文件并点击下载后,我的代码就会循环显示 GridView的行,当CheckBox被选中时,它会更新最初的 数据条目的错误值,以确保应该使哪些文件可用 下载。
protected void GetFiles_Click(object sender, EventArgs e)
{
int i = 0;
foreach (GridViewRow row in GridView1.Rows)
{
CheckBox chkRow = (row.Cells[1].FindControl("SelectedFiles") as CheckBox);
if (chkRow.Checked)
{
listOfData[i].CheckValue = true;
}
i++;
}
}
答案 3 :(得分:-1)
即使在Page.IsPostBack块中未绑定Gridview,Gridview也会完美填充,但此处复选框将始终返回false。
在Page.IsPostBack中绑定gridview,它运行得非常好。
使用以下代码 如果不是IsPostBack然后 的DataBind() 结束IF
然后Checkbox.Checked将返回true。