Pica Troll
Pica Troll

Reputation: 1

Telerik RadGrid incorrect data when paging

I have a textbox and a search button and a RadGrid which was already bound data to by OnNeedDataSource event. When I click search button, it will get the new data and I Rebind() that data on search button click event.

But when I change page number on the grid, the datasource was not the datasource I've already Rebind().

Upvotes: 0

Views: 259

Answers (1)

Nic
Nic

Reputation: 1024

Here is my sample code.. I don't find any problem on changing page. You might want to change Rebind to DataBind due to different DataSource. Rebind most probably will take back the previous DataSource

.aspx

<asp:ScriptManager ID="sm" runat="server"></asp:ScriptManager>

<asp:TextBox ID="txt" runat="server" Text=""></asp:TextBox> &nbsp;
<telerik:RadButton ID="btn" runat="server" Text="Search" OnClick="btn_Click">
</telerik:RadButton>

<br /><br />
<telerik:RadGrid ID="rg" runat="server" PageSize="5" 
    OnNeedDataSource="rg_NeedDataSource" AllowPaging="true"
    AutoGenerateColumns="false">
    <MasterTableView>
        <Columns>
            <telerik:GridBoundColumn DataField="Text" HeaderText="Sample">
            </telerik:GridBoundColumn>
        </Columns>
    </MasterTableView>
    <PagerStyle Mode="NumericPages" />
</telerik:RadGrid>

.cs

protected void Page_Load(object sender, EventArgs e)
{
    // Variable
    DataTable dt = new DataTable();
    dt.Columns.Add("Text");

    for (int i = 0; i < 20; i++)
        dt.Rows.Add("DataSource before search First Item No." + (i + 1));

    // Save to Viewstate
    ViewState["Data"] = dt;

    // Bind
    rg.DataSource = dt;
    rg.DataBind();
}

protected void rg_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    rg.DataSource = ViewState["Data"] as DataTable;
}

protected void btn_Click(object sender, EventArgs e)
{
    // Variable
    DataTable dt = new DataTable();
    dt.Columns.Add("Text");

    // Loop
    for (int i = 0; i < 20; i++)
        dt.Rows.Add("Datasource Search button item no " + (i + 1));

    // Viewstate the new Datasource
    ViewState["Data"] = dt;

    // Reset Page
    rg.CurrentPageIndex = 0;

    // Bind
    rg.DataSource = dt;
    rg.DataBind();
}

Upvotes: 0

Related Questions