无法将类型 'object' 隐式转换为 'int'。存在显式转换(您是否缺少转换?)

Cannot implicitly convert type 'object' to 'int'. An explicit conversion exists (are you missing a cast?)

我正在使用在编辑模板中使用 ASPX 用户控件的 Telerik RadGrid。我正在尝试保存已编辑的记录,但代码似乎有问题。我是 Grideview 的新手,不知道如何完成此操作。

我用作学习工具的 Telerik 示例使用 SQL 连接到数据库,并且我使用的是数据实体,因此我不得不在代码中进行一些转换。在示例中,Telerik 使用此代码。

    DataRow[] changedRows = this.Employees.Select("EmployeeID = " + editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["EmployeeID"]);

这对我不起作用,所以我正在尝试此代码:

DataRow[] changedRows = results.Where(r => r.SubjectId = (editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["SubjectId"]));

但我收到此错误消息: 无法将类型 'object' 隐式转换为 'int'。存在显式转换(是否缺少转换?)

如果我尝试使用 Convert.ToInt16() 将其转换为 int,我会收到相同的错误消息。我相信 DataRow[] 代表一行数据,那么为什么我会收到转换错误以及如何获取 "DataRow[] changedRows" 的值?

感谢您的帮助

你有两个问题。第一,您使用的是 assignment 运算符 (=) 而不是 equality 运算符 (==)。

其次,在比较 .Where() 谓词中的相等性之前,您需要将列 return 转换为整数。

DataRow[] changedRows = results.Where(r => r.SubjectId == 
    (int)(editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["SubjectId"]));

感谢 David L 的评论,因为我说过我对此很陌生,你让我开始思考,所以我做了更多研究,发现 SLaks 指出你将 DataRows 与 DataTables 一起使用的地方,因为我没有这样做我解决了此代码有问题:

GridEditableItem editedItem = e.Item as GridEditableItem;
        UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
       string subjectid = editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["SubjectId"].ToString();
       int intSubject = Convert.ToInt16(subjectid);
       var results = from r in DbContext.Subjects.ToList()
                     where r.SubjectId == intSubject
                     select r;
       List<Subject> newSubject = results.ToList();
       //string test = newSubject[0].Comments;
        if (newSubject.Count != 1)
        {

            RadGrid1.Controls.Add(new LiteralControl("Unable to locate the Subject for updating."));

            e.Canceled = true;

            return;

        }

再次感谢您的回复

佩里