GridView pas de Reliaison Correctement Après la Publication

J'ai un GridView qui a un DataSourceID pointant vers un ObjectDataSource. L'ObjectDataSource points à une méthode qui retourne une LINQ IQueryable en utilisant la propriété TypeName, SelectMethod, et SelectCountMethod propriétés du contrôle ObjectDataSource. Ce qui se passe est que les données de charge correctement dès le départ. Cependant, sur la publication, si je supprime les lignes de la GridView et d'essayer de les relier à l'aide de l'explicite GridView.DataBind(), ça ne fonctionne pas. Je sais LINQ est de retour le bon nombre de lignes et de tels parce que j'ai appelé le countmethod et il renvoie le bon nombre de lignes. Voici un exemple rapide:

<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" />

J'ai essayé d'ajouter un bouton et l'ajout de la TestGridView.DataBind(); la méthode. J'ai essayé de l'ajouter à l'événement Page_PreRender. Peu importe ce que j'essaie, ça ne marche pas.

Comme quelqu'un l'a suggéré ci-dessous, j'ai essayé de le déplacer vers Page_Load ainsi, et sans aller. Voici un exemple grossier de mon 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();
}
Modifié ci-dessus à nouveau.

OriginalL'auteur Jason N. Gaylord | 2009-11-18