2015-12-08 52 views
0

我正在使用编辑模板中使用ASPX用户控件的Telerik RadGrid。我试图保存编辑过的记录,但似乎遇到了代码问题。我对Grideview很陌生,无法弄清楚如何实现这一点。不能将类型'object'隐式转换为'int'。存在明确的转换(您是否缺少演员?)

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

的DataRow [] changedRows = results.Where(R => r.SubjectId =(editedItem.OwnerTableView.DataKeyValues [editedItem:

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

这不适合我,所以我想这个代码工作.ItemIndex] [ “SubjectId”]));

但是我收到此错误消息: 不能隐式地将类型'object'转换为'int'。存在明确的转换(您是否缺少演员?)

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

感谢您的帮助

+2

你可能需要转换检索的列:解决了这个代码的问题。 '(int)(editedItem.OwnerTableView.DataKeyValues [editedItem.ItemIndex] [“SubjectId”])'因为它很可能是一个对象,而不是一个整数。 –

+0

我试过了,错误信息改为“不能隐式地将类型'int'转换为'bool' – Perry

+0

请参阅下面的答案。 –

回答

0

感谢大卫L用你的意见,我说我是相当新的这一点,你让我思考,所以我做更多的研究,发现其中SLaks指出你使用数据行与数据表,因为我没有做,我再次

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; 

     } 

感谢您的答复

佩里

0

您有两个问题。一,您正在使用assignment运营商(=)而不是equality运营商(==)。

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

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