创建带有按钮的标题行中自定义的GridView

问题描述:

发布之后:Custom Header in GridView创建带有按钮的标题行中自定义的GridView

...我有一个相关的问题。我在OnDataBound中添加了表格行,并且显示出来,这些链接是可点击的。在这里添加它有两个问题:首先,如果发生的回发不是DataBind,则该行将消失;其次,单击LinkBut​​ton时不会发生任何事件。这里是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); 
} 

您可以尝试将它放在RowCreated Event中,同时创建标题。这也可能解决您的问题,LinkBut​​tons无法正常工作。

void GridView1_RowCreated(Object sender, GridViewRowEventArgs e) 
    { 

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

     }