我发现使用Microsoft LINQ To Sql的Telerik RadGrid数据源有一个奇怪的行为,我想知道是什么原因导致它 .
假设我有一个OnNeedDataSource事件的基本网格:
<telerik:RadGrid ID="grid" runat="server" OnNeedDataSource="grid_NeedDataSource">
...
</telerik:RadGrid>
代码隐藏中的事件处理程序:
protected void grid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
grid.DataSource = Dal.Db.VIEW_DETAILs;
}
在Microsoft Sql Server上,VIEW_DETAIL被定义为视图(选择查询连接多个普通表) . 视图查询的其中一个源表(假设它的名称为DETAIL)也使用了一个在视图中也存在的计算列 . 直接从Sql查询视图始终返回一致和更新的结果 .
在我的程序中,源表DETAIL更新,我正常调用
grid.DataBind()
更新其内容 . 令人惊讶的是,没有更新任何内容(例如,上面提到的计算列仍然是旧值) . 在处理了一些变通方法之后,我发现将grid_NeedDataSource处理程序上面的源代码更改为
protected void grid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
grid.DataSource = Dal.Db.VIEW_DETAILs.Where(x=> 1 == 1);
}
(例如,添加始终为true的Where子句)现在可以正确更新数据 .
有关此行为的任何见解?
1 回答
尝试调用
Rebind()
而不是DataBind()
.根据Telerik的说法,当你需要重新分配RadGrid的数据源时,你应该调用
Rebind()
. 检查第二部分滥用或不使用this Telerik page here上的NeedDataSource事件了解更多信息 .