无法将类型 '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;
}
再次感谢您的回复
佩里
我正在使用在编辑模板中使用 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;
}
再次感谢您的回复
佩里