我在Gridview中用模板绑定一列checkbox,可是当我选中checkbox时在按钮事件中获取不到该checkbox的状态,checked始终为False另外我的Gridview中放在updatepanel里的
部分代码:<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
foreach (GridViewRow row in grid_1.Rows)
{
index = (int)grid_1.DataKeys[row.RowIndex].Value;
bool result = ((CheckBox)row.FindControl("CheckBox1")).Checked;//这里始终为False,但在页面上我已经选择了
.....
}
部分代码:<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
foreach (GridViewRow row in grid_1.Rows)
{
index = (int)grid_1.DataKeys[row.RowIndex].Value;
bool result = ((CheckBox)row.FindControl("CheckBox1")).Checked;//这里始终为False,但在页面上我已经选择了
.....
}
cbx.checked=true;这样试下..
<asp:UpdatePanel ID="UpdatePanel2" runat="server"
ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView ID="grid_1" runat="server" Width="778px"
AllowPaging="True" CellPadding="4"
onpageindexchanging="grid_1_PageIndexChanging" PageSize="20" AllowSorting="True" onsorting="grid_1_Sorting"
DataKeyNames="nSubObjectID" onrowcommand="grid_1_RowCommand" BackColor="White"
BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px"
EmptyDataText="无数据,重新选择查询条件" >
<PagerSettings Position="TopAndBottom" />
<FooterStyle BackColor="#001F60" ForeColor="#D9E6FF" />
<RowStyle BackColor="White" ForeColor="#003399" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="序号" >
<ItemTemplate>
<asp:Label ID="lblIndex" runat="server" Text='<%#Container.DataItemIndex+1 %>'></asp:Label>
</ItemTemplate >
</asp:TemplateField>
<asp:HyperLinkField DataNavigateUrlFields="nSubObjectID"
DataTextField="姓名" DataNavigateUrlFormatString="studentinfo.aspx?nSubObjectID={0}"
Target="_blank" HeaderText="姓名" />
</Columns>
<PagerStyle BackColor="#D9E6FF" ForeColor="#003399" HorizontalAlign="Left" />
<SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
<HeaderStyle BackColor="#001F60" Font-Bold="True" ForeColor="#CCCCFF" />
<AlternatingRowStyle BackColor="#D9E6FF" />
</asp:GridView>
<asp:CheckBox ID="chk_qx" runat="server" AutoPostBack="True"
oncheckedchanged="chk_qx_CheckedChanged1" Text="全选" />
<asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="取消" /> <asp:Button ID="Button4" runat="server" onclick="Button4_Click" Text="Button" />
<br />
<br />
</ContentTemplate>
</asp:UpdatePanel>后台:
protected void Button4_Click(object sender, EventArgs e)
{
ArrayList categoryIDList = new ArrayList();
int index = -1;
foreach (GridViewRow row in grid_1.Rows)
{
index = (int)grid_1.DataKeys[row.RowIndex].Value;
bool result = ((CheckBox)row.FindControl("CheckBox1")).Checked;////这里始终为False,但在页面上我已经选择了 }
}
if(!page.ispostback)
{}
bool result = cbx.Checked;
跟踪得到上面cbx的text="" checked=false
看看Page_Load中绑定GridView的地方又有判断 当!Page.IsPostBack的时候再去绑定
然后在 protected void Page_Load(object sender, EventArgs e) 事件中 写入
if(!Page.IsPostBack)
GridView1.DataBind();
就可以用
var cbox = (CheckBox)CustomerInf.Rows[i].FindControl("DeleteThis")
cbox.Checked
得到Checked属性的值了。
加个AutoPostBack到时可以,但是每次点击都刷新,我又没用Ajax,这真让人心烦!跟奇怪的是,加了AutoPostBack的CheckBox居然在第一次点击时无效,附带页面刷新,之后的点击才正常。
没办法,该死的Asp.net,我只能靠强大的javascript与隐藏域了。