【问题标题】:Use a custom function to sort an asp:GridView使用自定义函数对asp进行排序:GridView
【发布时间】:2013-01-25 00:26:23
【问题描述】:

这是 GridView:

<asp:GridView ID="MyGridView" runat="server" AllowPaging="true" AllowSorting="true"
    OnPageIndexChanging="MyGridView_PageIndexChanging"
    OnSorting="MyGridView_Sorting">
    <Columns>
        <asp:TemplateField HeaderText="ID" SortExpression="Id">
            <ItemTemplate>
                <asp:Label ID="idLabel" runat="server" Text='<%# Bind("Id") %>' />
            </ItemTemplate>
       </asp:TemplateField>
    </Columns>
</asp:GridView>

这里,Id 列是一个字符串,总是由字母“T”后跟一个数字组成,即“T1”或“T597”,其他列是相当普通的名称和描述字符串字段。

我需要这个 Id 列来排序,就好像 Id 是数字一样,忽略前面的字母。但是因为它在那里,所以它被视为一个字符串并按如下方式排序:T1、T10、T100、T2、T231、T34、...

所以我认为可能的是:

protected void MyGridView_Sorting(object sender, GridViewSortEventArgs e)
{
    if (e.SortExpression.Equals("Id")
    {
         // Special sorting code
    }
    else
    {
        // Normal sorting code
    }
}

“正常”排序代码遵循将DataSource 转换为DataView 并设置DataView.Sort = e.SortExpression 等的常见模式,例如:allow sorting by column gridview

那么“特殊”的排序代码该怎么办呢?

更新:为了清楚起见,我可以根据需要滚动自己的函数来比较两个字符串。但是,我不知道如何将该函数应用到我的数据网格/数据源。

【问题讨论】:

    标签: c# asp.net sorting gridview


    【解决方案1】:

    您可以为 DataGridView.Sort 实现 IComparer 类:

    http://msdn.microsoft.com/en-us/library/wstxtkxs%28v=vs.85%29.aspx

    您可以在比较方法中将“T”和后面的数字分开。

    【讨论】:

      【解决方案2】:

      GridView 允许DataKeyNames,这就是这里的解决方案。在设置数据源时(在我的例子中,一个 SQL 查询)包括“FullId”和一个“PlainId”,它已经剥离了前导字符并将其余部分解析为 int。使用“FullId”作为列的文本值,但将“PlainId”设为DataKeyNames 之一并将其用作列的SortExpression

      【讨论】:

        猜你喜欢
        • 2015-11-26
        • 1970-01-01
        • 2020-08-30
        • 2015-08-11
        • 1970-01-01
        • 2010-12-08
        • 1970-01-01
        • 1970-01-01
        • 2014-04-19
        相关资源
        最近更新 更多