在Asp.net的Gridview中选择删除行
此代码有一个问题,我不知道那是什么。此代码必须在选中时删除gridview的行。 我设置了AutoGenerateSelectButton = true,然后编写这个不起作用的代码,并且从foreach获得Exception。在Asp.net的Gridview中选择删除行
protected void IDeletebtn_Click(object sender, EventArgs e)
{
foreach (GridViewRow Items in InboxGrv.SelectedRow)
{
var delete = from del in MDB.Messages
where del.Subject == Items.Cells[0].Text.ToString()
select del;
foreach (var Item in delete)
{
MDB.Messages.DeleteOnSubmit(Item);
}
MDB.SubmitChanges();
}
}
例外:
foreach语句可以在类型 'System.Web.UI.WebControls.GridViewRow' 的变量无法操作,因为 'System.Web.UI.WebControls.GridViewRow' 不包含关于 '的GetEnumerator' C公共定义:\ Documents和Settings \据Tehrani \桌面\ MessageAdminPage \ ADMIN \ Inbox.aspx.cs 87 9 C:... \ MessageAdminPage \
由于您在迭代不是集合的对象,因此引发了异常。 InboxGrv.SelectedRow是选定的GridViewRow对象。
因为,现在你已经有了GridViewRow对象,你可以从行中找到Id(PK)来删除数据库中的记录。
在foreach代码(MDB.Messages.DeleteOnSubmit(Item);)
修改您正在迭代的集合。使用一个for循环,而不是倒计数:
int deleteCount = delete.Count();
var deleteList = delete.ToList();
for(int i = deleteCount - 1; i > 0; i--)
{
MDB.Messages.DeleteOnSubmit(deleteList[i]);
}
这个例外从您的代码: 索引超出范围。必须是非负数且小于集合的大小。 参数名称:索引 – 2009-09-29 13:04:24
对不起,改>>到> – Colin 2009-09-29 13:32:54
我用断点看到deleteOnsubmite不工作 – 2009-09-29 13:47:00
试图改变自己的LINQ查询:
string subject = Items.Cells[0].Text.ToString()
var delete = from del in MDB.Messages
where del.Subject == subject
select del;
Linq2X尝试这个表达式树转换成SQL语句。但它现在不怎么处理Items.Cells集合。如果将字符串保存在局部变量中,那么Linq会看到一个常量。
编辑:啊!我非常专注于Linq声明,我发现,GridView不支持多个选定的项目。
protected void IDeletebtn_Click(object sender, EventArgs e)
{
foreach (GridViewRow Items in InboxGrv.SelectedRow)
{
SelectedRow是一个对象,而不是枚举。
这个问题再次重复 – 2009-09-29 13:17:37
你能发布这个异常吗? – Arthur 2009-09-29 12:44:33
发表您的例外 – 2009-09-29 12:49:43