Add Gridview Row AFTER Header

前端 未结 3 1499
旧时难觅i
旧时难觅i 2021-01-13 01:34

i\'m trying to add a new headerrow to a Gridview. This row should appear below the original headerrow.

As far as I know I have two events to choose from:

1.)

3条回答
  •  南方客
    南方客 (楼主)
    2021-01-13 02:08

    Since this is a custom GridView, why don't you consider overriding the CreateChildControls method?

    I.e (sorry, C#):

    protected override void CreateChildControls()
    {
        base.CreateChildControls();
    
        if (HeaderRow != null)
        {
            GridViewRow header = CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
            for (int i = 0; i < Columns.Count; i++)
            {
                TableCell cell = new TableCell();
                cell.Text = Columns[i].AccessibleHeaderText;
                cell.ForeColor = System.Drawing.Color.Black;
                cell.BackColor = System.Drawing.Color.Cornsilk;
                header.Cells.Add(cell);
            }
    
            Table table = (Table)Controls[0];
            table.Rows.AddAt(1, header);
        }
    }
    

    UPDATE As was mentioned by Ropstah, the sniplet above does not work with pagination on. I moved the code to a PrepareControlHierarchy and now it works gracefully with pagination, selection, and sorting.

    protected override void PrepareControlHierarchy()
    {
        if (ShowHeader && HeaderRow != null)
        {
            GridViewRow header = CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
            for (int i = 0; i < Columns.Count; i++)
            {
                TableCell cell = new TableCell();
                cell.Text = Columns[i].AccessibleHeaderText;
                cell.ForeColor = System.Drawing.Color.Black;
                cell.BackColor = System.Drawing.Color.Cornsilk;
                header.Cells.Add(cell);
            }
    
            Table table = (Table)Controls[0];
            table.Rows.AddAt(1, header);
        }
    
        //it seems that this call works at the beginning just as well
        //but I prefer it here, since base does some style manipulation on existing columns
        base.PrepareControlHierarchy();
    }
    

提交回复
热议问题