在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 \

+0

你能发布这个异常吗? – Arthur 2009-09-29 12:44:33

+0

发表您的例外 – 2009-09-29 12:49:43

由于您在迭代不是集合的对象,因此引发了异常。 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]); 
} 
+0

这个例外从您的代码: 索引超出范围。必须是非负数且小于集合的大小。 参数名称:索引 – 2009-09-29 13:04:24

+0

对不起,改>>到> – Colin 2009-09-29 13:32:54

+0

我用断点看到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是一个对象,而不是枚举。

+0

这个问题再次重复 – 2009-09-29 13:17:37