0

我们项目的 Telerik DLL 版本是 2012.3.1016.40

我们在我们的 ASP.NET 页面之一中使用 Telerik RadGrid。我们将 Telerik RadGrid 绑定到 ASP.NET DataTable 对象。我们还有一个 ASP.NET 按钮,如果它被点击就关闭页面。

我们调用基于 REST 的 Web 服务方法,并使用返回的数据填充 ASP.NET DataTable 对象。

我们将 ASP.NET 数据表对象绑定到 Telerik RadGrid。

使用 OnNeedDataSource 方法填充 ASP.NET DataTable 对象。

protected void commentRadGrid_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
        try
        {

             // The ViewStateThreadedDiscussion has a Type of ASP.NET DataTable.
             // Blah Blah Code That Populates the ViewStateThreadedDiscussion DataTable Blah Blah

             commentRadGrid.DataSource = new string[] { };

            if (ViewStateThreadedDiscussion == null)
            {
                // Extremely Important to use empty string double quotes if
                // the threadedDiscussionWithinDataTable DataTable is null because
                // Telerik only works properly if you assign the Telerik RadGrid DataSource
                // to an empty string with double quotes when we have a DataTable variable that is null.
                // Never assign null to the Telerik RadGrid DataSource because Telerik DLL throws Error.

               commentRadGrid.DataSource = "";
            }
            else
            {
                commentRadGrid.DataSource = ViewStateThreadedDiscussion;
            }



        } // end of try
        catch (Exception ex)
        {
            log4NetInstance.Error(ex.Message);
            log4NetInstance.Error(ex.StackTrace);
            log4NetInstance.Error(ex.ToString());
        } // end of catch (Exception ex)
    } // end of protected void SharedWithRadGrid_NeedDataSource(object source, GridNeedDataSourceEventArgs e)

我有一个指定了 OnClick 方法的 Telerik RadButton。在 Telerik RadButton OnClick 方法中,我在 Telerik RadGrid 上调用了重新绑定。这是 Telerik RadButton OnClick 方法代码:

 protected void OlderCommentsButton_Click(object sender, EventArgs e)
    {
        try
        {

            commentRadGrid.Rebind();
        }
        catch (Exception ex)
        {
            log4NetInstance.Error(ex.Message);
            log4NetInstance.Error(ex.StackTrace);
            log4NetInstance.Error(ex.ToString());
        } // end of catch (Exception ex)
    } // end of protected void OlderCommentsButton_Click(object sender, EventArgs e)

这是我对 Telerik RadGrid 的声明和配置:

<telerik:RadGrid runat="server" Width="60%" ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Left" ItemStyle-VerticalAlign="Top"  HeaderStyle-Width="60%" ID="commentRadGrid" AllowFilteringByColumn="true" AutoGenerateColumns="false"
    AllowPaging="true" OnPageIndexChanged="commentRadGrid_PageIndexChanged"  OnNeedDataSource="commentRadGrid_NeedDataSource" PageSize="100" Skin="Default" AllowSorting="true" AutoPostBack="true" ShowStatusBar="true" AllowCustomPaging="True"
    GridLines="none">

我有 Visual Studio 2012,我在带有断点的调试模式下运行应用程序。我对各种变量(如 ViewStateThreadedDiscussion ASP.NET DataTable 和 Telerik RadGrid DataSource 属性)使用了 Visual Studio 2012 提供的“添加观察”功能。即使在 Post Back 上,所有内容似乎都填充了正确的值。

但是,当在 PostBack 上加载 ASPX 页面时,Telerik RadGrid 会消失。

为什么 Telerik RadGrid 在 PostBack 上消失了?

4

2 回答 2

4

你不应该调用commentRadGrid.DataBind()内部commentRadGrid_NeedDataSource事件。

高级数据绑定(使用 NeedDataSource 事件)

绝不应在 NeedDataSource 事件处理程序中调用 Rebind() 方法。在通过 NeedDataSource 使用高级数据绑定时,也绝不应调用 DataBind()。对于类似 Microsoft GridView 的数据绑定,请参阅简单数据绑定。

更新:

如果您设置AllowCustomPaging="True",您将需要提供者VirtualItemCount

这基本上意味着您将 RadGrid 提供给最多 100 行 ( PageSize="100"),尽管您有一百万条记录。因此,RadGrid 需要知道您有多少条记录才能显示分页。

注意:如果您只有很少的记录,您希望将所有记录提供给 RadGrid。如果是这样,您不需要同时使用AllowCustomPaging="True"VirtualItemCount

这是示例示例 -

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<telerik:RadGrid runat="server" 
    ID="commentRadGrid" 
    AllowFilteringByColumn="true" 
    AutoGenerateColumns="True"
    AllowPaging="true" 
    OnPageIndexChanged="commentRadGrid_PageIndexChanged" 
    OnNeedDataSource="commentRadGrid_NeedDataSource" 
    PageSize="100" Skin="Default" 
    AllowSorting="true" 
    ShowStatusBar="true" 
    AllowCustomPaging="True"
    GridLines="none">
</telerik:RadGrid>
<asp:Button runat="server" ID="OlderCommentsButton" 
    OnCommand="OlderCommentsButton_Click" Text="Post Back" />

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

protected void commentRadGrid_NeedDataSource(
    object sender, GridNeedDataSourceEventArgs e)
{
    var users = new List<User>
    {
        new User {FirstName = "John", LastName = "Doe"},
        new User {FirstName = "Jenny", LastName = "Doe"},
    };

    commentRadGrid.DataSource = users;
    commentRadGrid.MasterTableView.VirtualItemCount = users.Count;
}

protected void OlderCommentsButton_Click(object sender, EventArgs e)
{
    try
    {
        commentRadGrid.Rebind();
    }
    catch (Exception ex)
    {
    }
}

protected void commentRadGrid_PageIndexChanged(
    object sender, GridPageChangedEventArgs e)
{

}
于 2013-11-06T18:50:45.637 回答
-1

只需 EnableViewState="true" 用于 RadGrid 控件。网格与 Column HeaderText 一起完美呈现。

于 2013-12-06T09:43:16.453 回答