网上法院起诉:DataGrid多行删除问题(ASP.NET)

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/04 19:49:36
我在DataGrid中加入一个CheckBox列
<asp:DataGrid id="DataGrid1" runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox id="chkSelect" runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>

然后再代码里利用循环删除
private void DELETE_Click(object sender, System.EventArgs e)
{
string sqlcmd="";
int aaa;
for(int i=0;i<(int)this.DataGrid1.Items.Count;i++)
{
CheckBox ckb=(CheckBox)DataGrid1.Items[i].FindControl("chkSelect");
if(ckb.Checked==true)
{
aaa=(int)DataGrid1.DataKeys[i];//一到这里就出问题
sqlcmd="DELETE ProInfo WHERE ProCode= "+aaa.ToString();
db.cmd(sqlcmd);//传值执行Command,略
db.BindDataGrid(sqlstr,DataGrid1);//数据绑定DataGrid,略
}
}
}

运行的时候问题就出在下面这句话,说索引超出范围
aaa=(int)DataGrid1.DataKeys[i];//一到这里就出问题

拜大虾赐教!
自己解决了

还是谢谢大家!

DataKeys是数据的关键字,用来跟XML,DataTable等发生映射关系用的。
而这里你没有指定DataKeys。所以DataKeys.Item.Count自然为0了。

这个程序你应该换一种思维:(这种思维应该应用到ASP.NET中去,效率是比较高的。)
CheckBox的ID为chkSelect,你应该有所区别,最好的方法是在chkSelect后面加上ID值,比如chkSelect_122等。
这样无论什么样的操作,知道了CheckBox的ID,对应记录的ID值也就确定了。
这是用的比较普遍的一种效率较高的方法,省去查找ID的过程。

绑定的时候,CheckBox的ID设为chkSelect_{ID}
程序取ID:
aaa=(int)(chk.Text.Split('_')[1].ToString());//这里就得到了ID值
注意,此时的FindControl方法应该改成查找CheckBox类型,然后判断ID是否已chkSelect开头就可以了。

一,主要是因为DataKeys 集合访问数据列表控件中每个记录的键值(显示为一行)。此集合自动用 DataKeyField 属性指定的字段中的值填充。必须在datagrid中定义好的!
******** where is your datakeyfield ?*********************

二,在datagrid中套用checkbox
从控件顺序来讲,datagrid永远是第一个控件,checkbox是第二个控件!

希望能帮得到你!