如何为GridViews使用RowCreated事件

时间:2012-06-26 12:32:35

标签: c# gridview event-handling

问题:

我想在gridview数据绑定中间添加标题。我更新了DataTable以包含标题及其正确位置(我在调试期间检查过,它们就在那里)。在包含标题的新行上,其中一个不需要的字段(不需要在标题中不需要该信息)中有一个名为“Subheader”的标记。

背景资料:

因此,我的数据表行包含服务器名称和服务器所属的组。我更新了DataTable,因此它插入了一个新行,其中服务器名称是标题文本。此新行所属的服务器组是“Subheader”。我的数据表比我的gridview显示的信息更多。我的gridview只需要一列,但是有一个visibility=false;列,用于保存服务器组。

我想要实现的目标:

因此,当我将此数据表绑定到gridview时,我希望所有非标题行都是指向另一个位置的链接。作为标题的所有数据行我都希望保留原样。

代码:

    private void CurrentServers_RowCreated(Object sender, GridViewRowEventArgs e)
    {

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if(e.Row.Cells[1].Text != "Subheader")
            {
                e.Row.Cells[0].Text = "<a href='/EventViewer.aspx?m=" + e.Row.Cells[0].Text + "&s=&e=Application&r=25'>" + e.Row.Cells[0].Text + "</a>";
            }
        }

    }

问题:

这不起作用。 e.Row.Cells[1].Text != "Subheader"始终返回true。在调试中,我检查e.Row.Cells[1].Text的值,并在那里的某个地方有我需要的信息。

  1. 这是我应该处理的正确事件吗?
  2. 如何访问该数据? e.Row.Cells[1].Texte.Row.Cells[1].ToString()不会返回我想要的结果,即使在调试中我可以在e.Row
  3. 中找到我想要的值
  4. 我已经尝试找到确切的方法,但无法找到答案。如果我的GridView只有2个数据表列的列,那么e.Row.Cells只有我的gridview需要的2个单元格,或者它是否会在分解数据表之前发生(即它是否具有我的数据表所具有的所有列) )

1 个答案:

答案 0 :(得分:1)

根据您绑定数据的方式以及获取服务器组的方式,您可以执行以下操作:

在您显示非标题行内容的项目模板中,使用两个占位符代替纯文本,其中一个将保留非超链接文本的标签,另一个将保留超链接。您将两个控件绑定到您使用的任何文本属性。并将这些占位符的展示率设置为Eval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader")!Eval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader")。这样你就不必编写代码来执行控制操作,也不必一起使用RowDataBound事件。

如果这没有意义,请告诉我们。)

编辑:

<asp:GridView ID=".." runat="server" ...>
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:PlaceHolder id="phTextContent" runat="server" visible='<%# Eval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader") %>'>
                    <asp:Label id="lblServerGroup" runat="server" text='<%#Eval("ServerGroup")%>'/>
                </asp:PlaceHolder>

                <asp:PlaceHolder id="phTextContent" runat="server" visible='<%# !Eval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader") %>'>
                    <asp:HyperLink id="hlServerGroup" runat="server" Text='<%#Eval("ServerGroup")%>' NavigateUrl='<%#string.Fromat("/MyAction.aspx?param=", Eval("Param"))%>'/>
                </asp:PlaceHolder>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>