1

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

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

<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>属性放在 aheadertext中,它就不起作用。

但我想同时拥有这两种功能。任何人都可以帮忙吗?

4

2 回答 2

3

然后你需要在你的HeaderTemplatewith中提供一个控件CommandName="Sort",例如 a 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>
于 2012-03-07T15:01:21.790 回答
0

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

<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 传递列的名称。只有这样它才能在我的情况下工作!

<asp:LinkButton ID="LbSort" runat="server" CommandName="Sort" CommandArgument="ColumnName" Text="Sort"  />
于 2021-03-15T12:27:23.510 回答