Gridview-Sortierung und Paging mit Dynamisch Erzeugten Controls

Habe ich mich in einer Essiggurke mit dynamischen Steuerelementen in einem gridivew.

Bin ich verbindlich die gridview-Komponente auf eine Liste und bin dann hinzufügen dyanmic kontrolliert. Zum halten der Kontrolle Stand ich muss die Seite laden. Da jedoch die Ereignisse, die ausgelöst werden, nachdem das laden der Seite bin ich nicht in der Lage, ordnungsgemäß zu behandeln Sortier-und paging-Ereignisse. Gibt es kreative Lösungen für dieses problem, oder bin ich da über diese alle falsch?

EDIT: ich bin nicht sicher, ich erklärte mein problem richtig. Es spielt keine Rolle, wo ich die dynamische Steuerelemente im Lebenszyklus. Das problem ist, dass die Sortierung und paging-Ereignisse erfordern mich zu binden das GridView, die (scheinbar) bewirkt, dass die Eigenschaften zugewiesen, um meine dynamische Steuerelemente verloren von ViewState, da die Bindung auf das Sortieren und paging geschieht spät im Lebenszyklus.

protected void Page_Load(object sender, EventArgs e)
{       
   //NOTE: to maintain control state of dynamic controls all databinding needs to be done in page load. 
   grdProducts.DataSource = GetDataSource();
   grdProducts.DataBind();
}

protected void grdProducts_OnRowDatabound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType != DataControlRowType.DataRow) return;        

    ManufacturerProduct m = new ManufacturerProduct();

    m.Model = DataBinder.Eval(e.Row.DataItem, "Model").ToString();

    PlaceHolder ph = new PlaceHolder();        
    ph = (PlaceHolder)e.Row.FindControl("phAddToCart");        

    LinkButton lb = new LinkButton();
    lb.Text = "Add To Cart";
    //NOTE: if I bind after page load the command never fires.      
    lb.Command +=  new CommandEventHandler(AddItem);
    lb.CommandName = "AddItem";
    lb.CommandArgument = m.Model;        
    ph.Controls.Add(lb);

}

protected void grdProducts_OnSorting(object sender, GridViewSortEventArgs e)
{
    //NOTE: since events fire after page load I can't handle this properly.

    hfSortExpression.Value = e.SortExpression.ToString();

    grdProducts.PageIndex = 0;
    //NOTE: If I rebind here I hose my dynamic controls
    //grdProducts.DataSource = GetDataSource();
    //grdProducts.DataBind();
}
InformationsquelleAutor plntxt | 2011-05-17
Schreibe einen Kommentar