0

このプロジェクトの Telerik DLL のバージョンは 2012.3.1016.40 です。

ASP.NET ページの 1 つで Telerik RadGrid を使用しています。Telerik RadGrid を ASP.NET DataTable オブジェクトにバインドします。また、クリックされた場合にページを閉じる ASP.NET ボタンもあります。

REST ベースの Web サービス メソッドを呼び出し、返されたデータを ASP.NET DataTable オブジェクトに入力します。

ASP.NET DataTable オブジェクトを Telerik RadGrid にバインドします。

ASP.NET DataTable オブジェクトは、OnNeedDataSource メソッドを使用して設定されます。

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 で Rebind を呼び出します。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 が提供する「ウォッチの追加」機能を使用しました。ポストバックでも、すべてに適切な値が設定されているようです。

ただし、PostBack で ASPX ページが読み込まれると、Telerik RadGrid が表示されなくなります。

PostBack で Telerik RadGrid が消えるのはなぜですか?

4

2 に答える 2

4

イベントcommentRadGrid.DataBind()内で呼び出してはいけません。commentRadGrid_NeedDataSource

高度なデータ バインディング (NeedDataSource イベントを使用)

NeedDataSource イベント ハンドラーで Rebind() メソッドを呼び出さないでください。Microsoft GridView のようなデータ バインディングについては、「単純なデータ バインディング」を参照してください。

アップデート:

を設定AllowCustomPaging="True"した場合は、provider が必要になりますVirtualItemCount

PageSize="100"これは基本的に、100 万のレコードがあるにもかかわらず、RadGrid に最大 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

RadGrid コントロールの EnableViewState="true" だけです。Grid は、Column HeaderText とともに完全にレンダリングされます。

于 2013-12-06T09:43:16.453 に答える