GridView wird nach dem Postback nicht ordnungsgemäß neu gebunden

Ich habe eine GridView mit einer DataSourceID, die auf eine ObjectDataSource verweist. Die ObjectDataSource verweist auf eine Methode, die mithilfe der TypeName-, SelectMethod- und SelectCountMethod-Eigenschaften des ObjectDataSource-Steuerelements eine LINQ IQueryable zurückgibt. Was passiert ist, dass die Daten im Voraus richtig geladen werden. Beim Postback funktioniert es jedoch nicht, wenn ich die Zeilen aus der GridView entferne und versuche, sie mit der expliziten GridView.DataBind () erneut zu binden. Ich weiß, dass LINQ die richtige Zeilenanzahl und dergleichen zurückgibt, weil ich die Zählmethode aufgerufen habe und sie die richtige Zeilenanzahl zurückgibt. Hier ist ein kurzes Beispiel:

<asp:GridView ID="TestGridView" runat="server" PageSize="20" 
    AutoGenerateColumns="false" AllowPaging="true" 
    AllowSorting="false" DataSourceID="TestDataSource">
    <Columns>
        ...
    </Columns>
</asp:GridView>

<asp:ObjectDataSource ID="TestDataSource" runat="server" 
    EnablePaging="true" SelectCountMethod="GetDetailCount" 
    SelectMethod="GetDetails" TypeName="MyApp.PageClass" />

Ich habe versucht, eine Schaltfläche und das TestGridView.DataBind () hinzuzufügen; Methode dazu. Ich habe versucht, es dem Ereignis Page PreRender hinzuzufügen. Egal was ich versuche, es funktioniert nicht.

Wie jemand unten vorgeschlagen hat, habe ich versucht, es auch auf Page Load zu verschieben, und es geht nicht. Hier ist ein grobes Beispiel für meinen Code:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // Set "initial" query parameters, then ...
        BindData();
    }
}

private void BindData()
{
    // EDITED: Removed the code below since I'm not looking to delete the
    //         rows from the database, but rather get the GridView to rebind
    //         which its not.
    ////Remove all current rows from the GridView
    //int colCount = TestGridView.Rows.Count;
    //for (int x = 1; x <= colCount; x++)
    //{
    //    TestGridView.DeleteRow(x);
    //}

    // Bind GridView to the ObjectDataSource
    TestGridView.DataBind();
}

protected void RegenerateImageButton_Click(object sender, ImageClickEventArgs e)
{
    // Set "updated" query parameters, then ...
    BindData();
}

Antworten auf die Frage(6)

Ihre Antwort auf die Frage