无法将类型'object'隐式转换为'int'。存在显式转换(您是否错过了演员?)

时间:2015-12-08 19:54:33

标签: c# casting entity-framework-4 telerik

我正在使用Telerik RadGrid,它在编辑模板中使用ASPX用户控件。我正在尝试保存已编辑的记录,但似乎遇到了代码问题。我是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”的值?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

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

其次,在比较.Where()谓词中的相等性之前,您需要将列返回到整数。

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

答案 1 :(得分:0)

感谢David L的评论,因为我说我对此很新,你让我思考所以我做了更多的研究,发现SLaks指出你使用DataTows和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;

        }

再次感谢您的回复

佩里