0

これが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などの一般的なパターンに従う場合、たとえば、列グリッドビューによる並べ替えを許可します。

では、「特別な」ソートコードに対して何をしますか?

更新:明確にするために、必要に応じて2つの文字列を比較するために自分の関数をロールするのに問題はありません。ただし、その関数をデータグリッド/データソースに適用する方法がわかりません。

4

2 に答える 2

1

DataGridView.Sort の IComparer クラスを実装できます。

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

「T」とそれに続く数値は、Compare メソッドで区切ることができます。

于 2013-01-25T01:43:38.457 に答える
0

GridView許可DataKeyNamesし、それがここでの解決策です。データ ソース (私の場合は SQL クエリ) を設定するときは、"FullId" と "PlainId" の両方を含めて、先頭の文字を取り除き、残りを int として解析します。列のテキスト値として「FullId」を使用しますが、「PlainId」を の 1 つにして、それを列のDataKeyNamesとして使用しSortExpressionます。

于 2013-01-30T20:13:52.013 に答える