使用自定义函数对asp:GridView进行排序

时间:2013-01-25 00:26:24

标签: c# asp.net sorting gridview

这是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

那么我该如何处理“特殊”排序代码?

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

2 个答案:

答案 0 :(得分:1)

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

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

您可以在比较方法中分离“T”和以下数字。

答案 1 :(得分:0)

GridView允许DataKeyNames,这就是解决方案。设置数据源(在我的情况下,SQL查询)包括“FullId”和“PlainId”,它已经剥离了主角并将余数解析为int。使用“FullId”作为列的文本值,但将“PlainId”设为DataKeyNames之一,并将其​​用作列的SortExpression

相关问题