ASP.NET GridView中的SortExpression不能与<headertemplate> </headertemplate>一起使用

时间:2012-03-07 14:49:18

标签: asp.net gridview templatefield

我有一个ASP.NET GridView。现在我将SortExpression属性添加到<TemplateField>标记,以使特定列可排序。

现在,其中一列有一些标记内容要添加到标题中。问题是,如果SortExpression中有<HeaderTemplate>标记,则<TemplateField>不起作用,您必须将其放在HeaderText <TemplateField>属性中。 但是,如果我将其转储到HeaderText属性中,则所有HTML内容都无法正常工作。

<asp:TemplateField SortExpression="FK_TesterID" ItemStyle-Width="300px" FooterStyle-Width="300px" ItemStyle-HorizontalAlign="Center" FooterStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center">
        <HeaderTemplate>
        <table width="100%">
        <tr>
        <td align="center">
        Tester
        </td>
        </tr>
        <tr>
       <td>
   <asp:DropDownList ID="cmbTestersHeader" ClientIDMode="Static" runat="server" Width="300px" DataSource='<%# PopulateTesterNames() %>' DataTextField="FullName"  DataValueField = "PK_ID" Visible="false" AutoPostBack="true" OnSelectedIndexChanged="cmbTestersHeader_SelectedIndexChanged" ToolTip="Bulk Assign Testers !"  ></asp:DropDownList>
         </td>
       </tr>
        </table>
         </HeaderTemplate>

所以你可以看到,如果我将整个<HeaderTemplate>属性放在headertext中,它就不起作用。

但我想要兼具两种功能。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

然后,您需要在HeaderTemplate中使用CommandName="Sort"提供一个控件,例如LinkButton

    <HeaderTemplate>
        <table width="100%">
            <tr>
                <td align="center">
                    <asp:LinkButton ID="LbSort" runat="server" CommandName="Sort" Text="Sort"  />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:DropDownList ID="cmbTestersHeader" ClientIDMode="Static" runat="server" Width="300px"
                        DataSource='<%# PopulateTesterNames() %>' DataTextField="FullName" DataValueField="PK_ID"
                        Visible="false" AutoPostBack="true" OnSelectedIndexChanged="cmbTestersHeader_SelectedIndexChanged"
                        ToolTip="Bulk Assign Testers !">
                    </asp:DropDownList>
                </td>
            </tr>
        </table>
    </HeaderTemplate>

答案 1 :(得分:0)

这是一个相当古老的线程,我在尝试准确解决所描述的问题时偶然发现,但此处提供的解决方案对我不起作用。如果您为 GridView 定义了 Sorting 方法,则

<asp:LinkButton ID="LbSort" runat="server" CommandName="Sort" Text="Sort"  />

会调用那个方法

protected void GridView_Sorting(object sender, GridViewSortEventArgs e)
{
    dt.DefaultView.Sort = e.SortExpression;

但是 e.SortExpression 将为空并且不会发生排序。您必须首先通过 LinkBut​​ton 的 CommandArgument 传递 Column 的名称。只有这样才对我有用!

<asp:LinkButton ID="LbSort" runat="server" CommandName="Sort" CommandArgument="ColumnName" Text="Sort"  />