GridView中的自定义标题

时间:2009-02-03 21:42:51

标签: c# asp.net gridview

我已经使用OnRowCreated方法中标题行上的SetRenderMethodDelegate在我的GridView中获得了自定义标题绘图。我在尝试将LinkBut​​tons添加到新标题行时遇到问题。

这就是RenderMethod的样子:

private void RenderSelectionMode(HtmlTextWriter output, Control container)
{
    TableHeaderCell cell = new TableHeaderCell();
    cell.Attributes["colspan"] = container.Controls.Count.ToString();
    AddSelectionModeContents(cell);
    cell.RenderControl(output);

    output.WriteEndTag("tr");

    HeaderStyle.AddAttributesToRender(output);
    output.WriteBeginTag("tr");

    for(int i = 0; i < container.Controls.Count; i++)
    {
        DataControlFieldHeaderCell cell = (DataControlFieldHeaderCell)container.Controls[i];
        cell.RenderControl(output);
    }
}

private void AddSelectionModeContents(Control parent)
{
    // TODO: should add css classes

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

    selectNoneLK = new LinkButton();
    selectNoneLK.ID = "SelectNoneLK";
    selectNoneLK.Text = "None";
    //selectNoneLK.Attributes["href"] = Page.ClientScript.GetPostBackClientHyperlink(selectNoneLK, "");
    //selectNoneLK.Click += SelectNoneLK_Click;
    selectNoneLK.Command += SelectNoneLK_Click;

    selectAllLK = new LinkButton();
    selectAllLK.ID = "SelectAllLK";
    selectAllLK.Text = "All";
    //selectAllLK.Attributes["href"] = Page.ClientScript.GetPostBackClientHyperlink(selectAllLK, "");
    //selectAllLK.Click += SelectAllLK_Click;
    selectAllLK.Command += SelectAllLK_Click;

    parent.Controls.Add(label);
    parent.Controls.Add(selectNoneLK);
    parent.Controls.Add(selectAllLK);
}

正如您所看到的,我尝试了不同的方法来使我的LinkBut​​tons工作(虽然没有工作)。 LinkBut​​tons呈现为普通锚标记,如下所示:&lt; a id =“SelectNoneLK”&gt;无&lt; / a&gt;

我知道ID看起来有点不对,因为我正在使用Master页面,ID应该更长。

任何帮助将不胜感激!

尼克

1 个答案:

答案 0 :(得分:1)

我猜测因为单元格不是控件层次结构的一部分(你从不将它添加到表中),所以LinkBut​​ton永远不会找到IContainer父级来重写它们的ID。

我倾向于使用优秀的RenderPipe control来解决这些类型的问题,这些问题允许我在一个地方声明我的控件,但是将它们渲染到其他地方。