删除在Asp.net的Gridview中选择的行

时间:2009-09-29 12:30:34

标签: asp.net linq gridview

本规范有问题,我不知道那是什么。此代码必须在选中时删除gridview行。 我设置AutoGenerateSelectButton = true然后编写这个不起作用的代码,并从foreach中获得Exception。

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 and Settings \ Tehrani \ Desktop \ MessageAdminPage \ ADMIN \ Inbox.aspx.cs 87 9 C:... \ MessageAdminPage \

3 个答案:

答案 0 :(得分:1)

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]);
}

答案 1 :(得分:0)

尝试更改您的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将看到一个常量。

编辑:啊!我非常专注于Lind声明,我认为GridView不支持多个选定的项目。

protected void IDeletebtn_Click(object sender, EventArgs e) 
{

    foreach (GridViewRow Items in InboxGrv.SelectedRow)
    {

SelectedRow是一个Object,而不是枚举。

答案 2 :(得分:0)

抛出异常是因为您正在迭代不是集合的对象。 InboxGrv.SelectedRow是选定的GridViewRow对象。

因为现在你已经有了GridViewRow对象,你可以从Row中找到Id(PK)来删除数据库中的记录。