3

我发现 Telerik RadGrid Datasource 使用 Microsoft LINQ To Sql 有一个奇怪的行为,我想知道是什么原因造成的。

假设我有一个带有 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);
}

(例如,添加一个始终为真的Where子句)数据现在已正确更新。

对这种行为有任何见解吗?

4

1 回答 1

0

Try calling Rebind() instead of DataBind().

According to Telerik, when you need to reassign the datasource of a RadGrid, you should be calling Rebind(). Check the 2nd section Misusing or Not Using NeedDataSource Event on this Telerik page here for more.

于 2014-10-17T13:08:59.520 回答