これが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つの文字列を比較するために自分の関数をロールするのに問題はありません。ただし、その関数をデータグリッド/データソースに適用する方法がわかりません。