无法隐式转换类型';对象';到';int';.存在显式转换(是否缺少强制转换?)

本文关键字:转换 是否 显式转换 类型 对象 int 存在 | 更新日期: 2023-09-27 18:26:16

我使用的Telerik RadGrid在编辑模板中使用ASPX用户控件。我正在尝试保存编辑过的记录,但代码似乎有问题。我对Grideview有点陌生,不知道如何做到这一点。

我用作学习工具的Telerik示例使用了与数据库的SQL连接,而我使用的是数据实体,因此我不得不在代码中进行一些翻译。在这个例子中,Telerik使用了这个代码。

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

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

DataRow[]changedRows=结果。其中(r=>r.SubjectId=(editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["SubjectId"]);

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

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

感谢您的帮助

无法隐式转换类型';对象';到';int';.存在显式转换(是否缺少强制转换?)

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

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

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

再次感谢您的回复

Perry

相关文章: