本规范有问题,我不知道那是什么。此代码必须在选中时删除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 \
答案 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)来删除数据库中的记录。