我收到错误
“指数超出范围。必须是非负数且小于规模 集合“
尝试删除gridview行时。我的aspx.cs代码如下:
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
try
{
main delete=new main();
// int id = Convert.ToInt32(GridView1.Rows[e.RowIndex].Cells["id"].Value);
// string ID = GridView1.Rows[e.RowIndex].ToString();
sQLcONN.Open();
string Query = "delete * from shoppingcart where shoppingcart.with_puja = '"+Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value.ToString())+"' ";
delete.deleteData(Query);
Bindgrid();
sQLcONN.Close();
}
catch (Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
}
}
答案 0 :(得分:1)
也许DataKeys
部分是罪魁祸首,它必须是这样的:
string Query = "delete from shoppingcart where shoppingcart.with_puja = '" + Convert.ToInt32(e.Item.DataKeys["nameOfKey"].Value).ToString() + "'";
或类似的东西:
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
try
{
main delete = new main();
DataTable dt = GridView1.DataSource as DataTatable;
sQLcONN.Open();
string Query = "delete from shoppingcart where shoppingcart.with_puja = '" + Convert.ToInt32(dt.Rows[e.RowIndex]["nameOfKey"]).ToString() + "'";
delete.deleteData(Query);
Bindgrid();
sQLcONN.Close();
}
catch (Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
}
}
nameOfKey
表格的列名是with_puja
,GridView1
必须为e.Item
,如果e
有Item
属性。
答案 1 :(得分:1)
DataKeys
中的GridView
就像:
DataKeyNames="Id, foo, foo"
然后尝试使用这样的字符串:
Convert.ToInt32(GridView1.DataKeys[e.RowIndex][0].ToString()); // 0 is the index and in this case Id will be at zero
答案 2 :(得分:1)
好吧,这个问题让Bejebus不在我身边,但直到今天才弄明白。
我的情况:
数据库新手。
设置我自己的数据库。
将ASP.NET与MySQL一起使用,phpMyAdmin
出于某种原因,我的桌子中只有一个有这个问题。
在搜索解决方案时,我决定打开我的数据库并将违规表的存储引擎从 MyISAM更改为InnoDB 。
仅此一点就解决了这个问题。
但对于真正的问题,这只是一个线索。就我而言,有问题的表格读得更重,只是偶尔改变,所以MyISAM就是我想要的。
关键区别是MyISAM对输入更严格。正如您在上面所看到的,有很多Int32转换正在进行中。所以,试试这个:
希望能为他人节省一些时间和悲伤。
答案 3 :(得分:0)
您可以将行索引作为CommandArgument传递。
在服务器上的事件方法中:
int rowIndex = int.Parse(e.CommandArgument.ToString());
string val = (string)this.grid.DataKeys[rowIndex]["myKey"];
在按钮上使用:
CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'
修改强>
查询:
string Query = "delete * from shoppingcart where shoppingcart.with_puja = '"+val +"' ";
我建议使用参数来避免sql injections。
答案 4 :(得分:0)
试试这个
string Query = "delete * from shoppingcart where shoppingcart.with_puja = '" + Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values["Id"].ToString()) + "'";
答案 5 :(得分:0)
sum + = Convert.ToInt32(GridView1.Rows [i] .Cells [3] .Text);