注册 登录
编程论坛 ASP.NET技术论坛

Gridview和CheckBox的问题!

lbhnrg2021 发布于 2007-01-19 12:05, 4892 次点击

我用FOR循环遍历检索Girdview中CheckBox是否被选中,但是无法实现!开始我以为是语句错误,然后我用response.write()返回搜索结果,但是我选中的CheckBox的Checked状态都为False这是怎么回事,但是我想了好久,逻辑方面没有什么问题啊!遍历的语法也没有用错.请高手指教

11 回复
#2
6ygg2007-01-19 12:39
最好是把你的代码发出来看看..也许你认为没错的地方却错了,呵呵
#3
lbhnrg20212007-01-19 13:04

protected void Button1_Click(object sender, EventArgs e)
{
all.DCommd=new System.Data.OleDb.OleDbCommand();
int GridRows = Convert.ToInt32(GridView1.Rows.Count);
int i;
for (i = 0; i < GridRows; i++)
{
int Count = Convert.ToInt32(all.MySet.Tables[DataStr_1].Rows[i].ItemArray[0]);
String Command;
if (((CheckBox)GridView1.Rows[i].FindControl("DelCheck")).Checked)
{
Command = "DELETE FROM LeText WHERE LeText_ID=" + Convert.ToString(Count);
Select.DC(Command, all.MyConn);
all.MyConn.Open();
all.DCommd.ExecuteNonQuery();
all.MyConn.Close();
}
}
}这是原代码!

#4
lbhnrg20212007-01-19 13:12

这个是原来数据库的代码!
这个才是控件状态搜索的代码!
all.DCommd=new System.Data.OleDb.OleDbCommand();
int GridRows = Convert.ToInt32(GridView1.Rows.Count);
int i;
for (i = 0; i < GridRows; i++)
{
int Count = Convert.ToInt32(all.MySet.Tables[DataStr_1].Rows[i].ItemArray[0]);
String Command;
bool isChecked = ((CheckBox)GridView1.Rows[i].FindControl("DelCheck")).Checked;
Response.Write(Convert.ToString(isChecked));
}返回的状态全部是FALSE,不管你选中还是没选中!

#5
6ygg2007-01-19 13:30
[CODE] all.DCommd = new System.Data.OleDb.OleDbCommand();
int GridRows = Convert.ToInt32(GridView1.Rows.Count);
int i;
CheckBox checkOf = null;
bool isChecked = false;
for (i = 0; i < GridRows; i++)
{
isChecked = false;
int Count = Convert.ToInt32(all.MySet.Tables[DataStr_1].Rows[i].ItemArray[0]);
String Command;
checkOf = (CheckBox)GridView1.Rows[i].FindControl("DelCheck");
isChecked = checkOf.Checked;
Response.Write(Convert.ToString(isChecked));
}[/CODE]
#6
lbhnrg20212007-01-19 13:48
还是FALSE,你自己试试看!郁闷了!javascript这个又不好做.不过还要是感谢你!
#7
summoner2007-01-19 14:31

试试这个看看,打断点跑一遍,看看数组里都是些什么值
string[] deleteids = new string[GridView1.Rows.Count];
for (int i = 0; i < GridView1.Rows.Count; i++)
{
CheckBox cb = (CheckBox) GridView1.Rows[i].Cells[0].Controls[1]; //Cell[0]这个代表CheckBox列在第一列,视具体情况定
if (cb.Checked)
{
deleteids[i] = ids[i];
}
}

#8
chenxkfox2007-01-19 15:45
你看看这个!
只有本站会员才能查看附件,请 登录

#9
lbhnrg20212007-01-19 18:02
都没用!这个测试过了!我把原码全部发上去,希望大家讨论下,我开始认为是B/S的问题,但是测试过,状态都有保存啊!而且Gridview我也只绑定一次!没有2次绑定.我做全选设置也是可以的!但是就是按删除按扭的时候,无法搜索CheckBox的Checked状态.不管选还是没选都一个样!Checked都是false值把我搞郁闷了!
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
int GridRows = Convert.ToInt32(GridView1.Rows.Count);
int i;
if (CheckBox1.Checked)
{
for (i = 0; i < GridRows; i++)
{
((CheckBox)GridView1.Rows[i].FindControl("myall")).Checked = true;
}
}
else
{
for (i = 0; i < GridRows; i++)
{
((CheckBox)GridView1.Rows[i].FindControl("myall")).Checked = false;
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
int x = 0;
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
bool bb = CheckBox1.Checked;
CheckBox cb = (CheckBox)GridView1.Rows[i].FindControl("myall");
if (cb.Checked)
{
x += 1;
}
}
Response.Write(Convert.ToString(x));
this.CheckBox1.Checked = false;
GridView1.DataBind();
}这就是全选和删除按扭的全部代码!删除按扭这段代码是用来测试,CheckBox的Checked状态的!
#10
lbhnrg20212007-01-19 18:47
谢谢大家,我知道了!我已经搞出来了!EnableViewState属性要设置:false,是一个典型的B/S错误,因为起初页面读取数据的时候一直存在Enableviewstate中,也就是说,当你选择自己建立的asp控件的是时候前面状态并没有改变,但是关闭enableviewstate后,状态就不会保存,所以原来的状态刷新后就不会在保存,而它会记录新状态,我们就用这个状态.我自己的理解是这样的!看来要多看看state的教程!搞了一个下午,太谢谢大家了!可能我的理解对于大家来说些累,不过和大家分享是我的快事!
#11
bygg2007-01-21 00:53
厉害...
#12
chriswu2008-10-02 13:26
谢谢楼主
别这个问题折磨了半天,终于搞定了
1