Telerik RadGrid中的数据未使用LINQ-to-SQL更新(奇怪的行为)

时间:2013-10-09 11:56:11

标签: c# asp.net linq-to-sql telerik-grid radgrid

我使用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);
}

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

有关此行为的任何见解?

1 个答案:

答案 0 :(得分:0)

尝试拨打Rebind()而不是DataBind()

根据Telerik的说法,当你需要重新分配RadGrid的数据源时,你应该调用Rebind()。检查this Telerik page here上的第二部分滥用或不使用NeedDataSource事件以获取更多信息。