<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="e_id" HeaderText="序号" InsertVisible="False" ReadOnly="True" SortExpression="e_id" >
<ItemStyle Width="30px" Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="e_name" HeaderText="企业名" SortExpression="e_name" >
<ControlStyle Width="130px"></ControlStyle>
<ItemStyle Width="170px" Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="e_pname" HeaderText="联系人" SortExpression="e_pname" >
<ControlStyle Width="50px"></ControlStyle>
<ItemStyle Width="60px" Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="e_phone" HeaderText="联系电话" SortExpression="e_phone" >
<ControlStyle Width="100px"></ControlStyle>
<ItemStyle Width="90px" Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="e_email" HeaderText="电子邮件" SortExpression="e_email" >
<ControlStyle Width="100px"></ControlStyle>
<ItemStyle Width="90px" Wrap="False" />
</asp:BoundField>
<asp:CommandField HeaderText="编辑" ShowEditButton="True" >
<ItemStyle Width="60px" Wrap="False" />
</asp:CommandField>
</Columns>
<RowStyle ForeColor="#000066" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
</asp:GridView>
<asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="True" Font-Size="9pt" OnCheckedChanged="CheckBox2_CheckedChanged"
Text="全选" />
<asp:Button ID="Button1" runat="server" Font-Size="9pt" Text="取消" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Font-Size="9pt" Text="删除" OnClick="Button2_Click" />
后:
protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (CheckBox2.Checked == true)
{
cbox.Checked = true;
}
else
{
cbox.Checked = false;
}
}
}
protected void Button2_Click(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked) //此处为什么不触发?
{
// string sqlstr = "delete from +++++++='" + GridView1.DataKeys[i].Value + "'";
TextBox2.Text = "hello";
}
else
{
TextBox2.Text = "NND";
}
}
bind();
}
25 个解决方案
#1
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
#2
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
是否正确
是否正确
#3
Checked是用来判断是否选择。应然不会触发
SelectIndex才是用来改变选择
SelectIndex才是用来改变选择
#4
if (cbox.Checked == true) 试过了是不行的
#5
CheckBox2_CheckedChanged 中证明 CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1"); 是正确的 因为 全选和取消都是正常的
#6
cbox.Checked == true
试试这个,然后加断点看看啊
试试这个,然后加断点看看啊
#7
就是前面已经进行了复选 但 if (cbox.Checked) 或 if (cbox.Checked==true) 总是认为是没有选择的 不知道为什么
#8
不好意思,看差了。CheckBox1_CheckedChanged 要AutoPostBack鼠标点击触发,后台触发代码如下。
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
Response.Write("aaa");
}
protected void Button1_Click(object sender, EventArgs e)
{
CheckBox1.Checked = !CheckBox1.Checked;
CheckBox1_CheckedChanged((object)CheckBox1,null);
}
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
Response.Write("aaa");
}
protected void Button1_Click(object sender, EventArgs e)
{
CheckBox1.Checked = !CheckBox1.Checked;
CheckBox1_CheckedChanged((object)CheckBox1,null);
}
#9
你又重新绑定了吧 这个 bind(); 注释掉
#10
嗯 AutoPostBack
#11
看错了,你那个bind(); 写到if(!IsPostBack)里面了吗
#12
跟踪一下,看看这些checkbox是否跟你测试选中的一致!逐步找出问题。
至少 protected void Button2_Click(object sender, EventArgs e) 不会有问题!
至少 protected void Button2_Click(object sender, EventArgs e) 不会有问题!
#13
楼上的if(!IsPostBack)说的很重要,我曾在这个地方出错过!
#14
<asp:CheckBox ID="CheckBox1" runat="server" />
的AutoPostBack设成True
的AutoPostBack设成True
#15
好像变成 点一下 刷新下了
#16
if (!IsPostBack)
{
// ViewState["SortOrder"] = "e_id";
// ViewState["OrderDire"] = "ASC";
bind();
}
已经加的
{
// ViewState["SortOrder"] = "e_id";
// ViewState["OrderDire"] = "ASC";
bind();
}
已经加的
#17
asp:CheckBox的事件与响应代码绑定了吗
#18
就检查 checkbox 选中状态 还要绑定事件么?
#19
不好意思,看错了,<asp:CheckBox ID="CheckBox1" runat="server" />
不需要加AutoPostBack。
你这个问题是很常见的问题。刷页面会导致Gridview的Bounding事件,会把Checkbox重构,所以所有的钩都会没。
这个问题的解决方法是在PageLoad里,写个方法,把当前选中的记录的Key记下,然后再Button事件的最开始,再重新把这些钩打上,然后进行之后的判断。
不需要加AutoPostBack。
你这个问题是很常见的问题。刷页面会导致Gridview的Bounding事件,会把Checkbox重构,所以所有的钩都会没。
这个问题的解决方法是在PageLoad里,写个方法,把当前选中的记录的Key记下,然后再Button事件的最开始,再重新把这些钩打上,然后进行之后的判断。
#20
这样不是 太麻烦了么 还有更好的办法么
#21
这是我做的简单测试例子,你自己对比下,看看自己哪里不一样
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox2_CheckedChanged" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("s");
dt.Rows.Add("ss");
dt.Rows.Add("ss");
dt.Rows.Add("ss");
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (CheckBox2.Checked == true)
{
cbox.Checked = true;
}
else
{
cbox.Checked = false;
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked) //此处为什么不触发?
{
Response.Write(i.ToString()+"<br/>");
}
}
}
#22
你这个测试通过的么?
#23
21楼这样每次刷页面都不重新绑数据是不行的,这样很容易导致数据库和页面不一致
#24
autoPostBack=true;
that's OK
that's OK
#25
.
#1
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
#2
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
是否正确
是否正确
#3
Checked是用来判断是否选择。应然不会触发
SelectIndex才是用来改变选择
SelectIndex才是用来改变选择
#4
if (cbox.Checked == true) 试过了是不行的
#5
CheckBox2_CheckedChanged 中证明 CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1"); 是正确的 因为 全选和取消都是正常的
#6
cbox.Checked == true
试试这个,然后加断点看看啊
试试这个,然后加断点看看啊
#7
就是前面已经进行了复选 但 if (cbox.Checked) 或 if (cbox.Checked==true) 总是认为是没有选择的 不知道为什么
#8
不好意思,看差了。CheckBox1_CheckedChanged 要AutoPostBack鼠标点击触发,后台触发代码如下。
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
Response.Write("aaa");
}
protected void Button1_Click(object sender, EventArgs e)
{
CheckBox1.Checked = !CheckBox1.Checked;
CheckBox1_CheckedChanged((object)CheckBox1,null);
}
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
Response.Write("aaa");
}
protected void Button1_Click(object sender, EventArgs e)
{
CheckBox1.Checked = !CheckBox1.Checked;
CheckBox1_CheckedChanged((object)CheckBox1,null);
}
#9
你又重新绑定了吧 这个 bind(); 注释掉
#10
嗯 AutoPostBack
#11
看错了,你那个bind(); 写到if(!IsPostBack)里面了吗
#12
跟踪一下,看看这些checkbox是否跟你测试选中的一致!逐步找出问题。
至少 protected void Button2_Click(object sender, EventArgs e) 不会有问题!
至少 protected void Button2_Click(object sender, EventArgs e) 不会有问题!
#13
楼上的if(!IsPostBack)说的很重要,我曾在这个地方出错过!
#14
<asp:CheckBox ID="CheckBox1" runat="server" />
的AutoPostBack设成True
的AutoPostBack设成True
#15
好像变成 点一下 刷新下了
#16
if (!IsPostBack)
{
// ViewState["SortOrder"] = "e_id";
// ViewState["OrderDire"] = "ASC";
bind();
}
已经加的
{
// ViewState["SortOrder"] = "e_id";
// ViewState["OrderDire"] = "ASC";
bind();
}
已经加的
#17
asp:CheckBox的事件与响应代码绑定了吗
#18
就检查 checkbox 选中状态 还要绑定事件么?
#19
不好意思,看错了,<asp:CheckBox ID="CheckBox1" runat="server" />
不需要加AutoPostBack。
你这个问题是很常见的问题。刷页面会导致Gridview的Bounding事件,会把Checkbox重构,所以所有的钩都会没。
这个问题的解决方法是在PageLoad里,写个方法,把当前选中的记录的Key记下,然后再Button事件的最开始,再重新把这些钩打上,然后进行之后的判断。
不需要加AutoPostBack。
你这个问题是很常见的问题。刷页面会导致Gridview的Bounding事件,会把Checkbox重构,所以所有的钩都会没。
这个问题的解决方法是在PageLoad里,写个方法,把当前选中的记录的Key记下,然后再Button事件的最开始,再重新把这些钩打上,然后进行之后的判断。
#20
这样不是 太麻烦了么 还有更好的办法么
#21
这是我做的简单测试例子,你自己对比下,看看自己哪里不一样
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox2_CheckedChanged" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("s");
dt.Rows.Add("ss");
dt.Rows.Add("ss");
dt.Rows.Add("ss");
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (CheckBox2.Checked == true)
{
cbox.Checked = true;
}
else
{
cbox.Checked = false;
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked) //此处为什么不触发?
{
Response.Write(i.ToString()+"<br/>");
}
}
}
#22
你这个测试通过的么?
#23
21楼这样每次刷页面都不重新绑数据是不行的,这样很容易导致数据库和页面不一致
#24
autoPostBack=true;
that's OK
that's OK
#25
.