2009-02-05 3 views
1

Après avoir affiché ceci: Custom Header in GridViewCréation d'une ligne d'en-tête avec des boutons dans une mesure GridView

... J'ai un problème connexe. J'ai ajouté la ligne de table pendant OnDataBound, et il apparaît, les liens sont cliquables. Il y a deux problèmes avec l'ajout ici: d'abord, si une publication se produit sans DataBind, la ligne disparaît; Deuxièmement, aucun événement ne se produit lorsque les LinkButtons sont cliqués. Voici le code OnDataBound:


protected override void OnDataBound(EventArgs e) 
{ 
    base.OnDataBound(e); 

    // Hook up the handler to create the Selection header/footer 

    // TODO: Wrap this in a function sometime 
    Table table = (Table)Controls[0]; 
    GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal); 

    // TODO: should add css classes 
    TableHeaderCell cell = new TableHeaderCell(); 
    cell.ColumnSpan = Columns.Count + 1; // plus 1 for the checkbox column 
    cell.HorizontalAlign = HorizontalAlign.Left; // do this or css? 

    HtmlGenericControl label = new HtmlGenericControl("label"); 
    label.InnerText = "Select:"; 

    selectNoneLK = new LinkButton(); 
    selectNoneLK.ID = "SelectNoneLK"; 
    selectNoneLK.Text = "None"; 
    selectNoneLK.Click += SelectNoneLK_Click; 
    //selectNoneLK.CommandName = "SelectNone"; 
    //selectNoneLK.Command += SelectNoneLK_Click; 

    selectAllLK = new LinkButton(); 
    selectAllLK.ID = "SelectAllLK"; 
    selectAllLK.Text = "All on this page"; 
    //selectAllLK.CommandName = "SelectAll"; 
    //selectAllLK.Command += SelectAllLK_Click; 
    selectAllLK.Click += SelectAllLK_Click; 

    cell.Controls.Add(label); 
    cell.Controls.Add(selectNoneLK); 
    cell.Controls.Add(selectAllLK); 

    row.Controls.Add(cell); 

    // Find out where to put this row 

    int rowIndex = 0; 
    if(SelectionMode == SelectionMode.AboveHeader) 
    { 
     rowIndex = 0; 
    } 
    else if(SelectionMode == SelectionMode.BelowHeader) 
    { 
     rowIndex = 1; 
    } 
    else if(SelectionMode == SelectionMode.AboveFooter) 
    { 
     rowIndex = table.Rows.Count; 
    } 
    else if(SelectionMode == SelectionMode.BelowFooter) 
    { 
     rowIndex = table.Rows.Count + 1; 
    } 

    table.Rows.AddAt(rowIndex, row); 
} 

Répondre

2

Vous pouvez essayer de le placer dans l'événement RowCreated, pendant que l'en-tête est en cours de création. Cela pourrait également résoudre votre problème avec le LinkButtons ne fonctionne pas.

void GridView1_RowCreated(Object sender, GridViewRowEventArgs e) 
    { 

    if(e.Row.RowType == DataControlRowType.Header) 
     { 
     ...your code here 

     } 
Questions connexes