帮我看个小错误!都来都来,立即给分!!
索引超出范围。必须为非负值并小于集合大小。
参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index
源错误:
行 170: if (chk.Checked)
行 171: {
行 172: ID[i] = Convert.ToInt32(list1.DataKeys[dl.ItemIndex+1].ToString());
行 173: try
行 174: {
我的代码如下:
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
int[] ID = new int[list1.Items.Count];
int i = 0;
foreach (DataListItem dl in list1.Items)
{
CheckBox chk = (CheckBox)dl.FindControl( "chkSelect ");
if (chk.Checked)
{
ID[i] = Convert.ToInt32(list1.DataKeys[dl.ItemIndex].ToString());
try
{
conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings[ "ConnStr "]);
conn.Open();
cmd = new SqlCommand( "delete from zhanquxinxi where zh=ID[i] ", conn);
cmd.ExecuteNonQuery();
}
catch (Exception exp)
{
Response.Write(exp.Message);
}
}
}
BindData1();
}
[解决办法]
在删除时没有考滤到最后设置
[解决办法]
uP
[解决办法]
估计是参数问题..你最好吧那一段的数据打印出来 看看...
[解决办法]
i的值是不是要++
[解决办法]
DataKeys[dl.ItemIndex+1] 这个索引超出范围了。。你不要用+1试下,索引是从0开始的
[解决办法]
DataKeys[dl.ItemIndex+1] 这个索引超出范围了。。你不要用+1试下,索引是从0开始的
////
这个说的是一种情况
还有看你的DataLIst的DataKeyField是否设值了
[解决办法]
应该是DataKeys问题把?
[解决办法]
你可以在模板列在添加一个标签控件隐藏 把id赋给他 当chk.Checked取值
CheckBox chk = (CheckBox)dl.FindControl( "chkSelect ");
if (chk.Checked)
{
ID[i] = (Label)GridView2.Rows[i].FindControl( "Label1 ").Text;
try
{
conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings[ "ConnStr "]);
conn.Open();
cmd = new SqlCommand( "delete from zhanquxinxi where zh=ID[i] ", conn);
cmd.ExecuteNonQuery();
}
catch (Exception exp)
{
Response.Write(exp.Message);
}
}
[解决办法]
up!
[解决办法]
ID[i] = Convert.ToInt32(list1.DataKeys[dl.ItemIndex].ToString());
====================
这样也超出范围的话那就是你根本就每设置DataLIst的DataKeyField,连这个属性都每设置,你怎么可以用DataKeys[i]来取值呢?
看楼主的代码应该把DataLIst的DataKeyField设为你的那个数据库表的主键ID,然后菜可以用DataKeys[i]来取第i行的ID值
[解决办法]
if (chk.Checked)
行 171: {
行 172: ID[i] = Convert.ToInt32(list1.DataKeys[dl.ItemIndex+1].ToString());
行 173: try
行 174: {
你这个i并没有变,总是0
[解决办法]
cmd = new SqlCommand( "delete from zhanquxinxi where zh=ID[i] ", conn);
这是什么SQL语句?
[解决办法]
????
[解决办法]
delete from zhanquxinxi where zh=ID[i]
错了。
ID[i] = Convert.ToInt32(list1.DataKeys[dl.ItemIndex+1].ToString());
把这句分成2句,看看哪个索引超出范围。
------解决方案--------------------
在Datalist页面代码中,添加DataKeyField= "你的id " 你的id:一般都是你数据库的主键!