2013-01-25 42 views
0

這裏的GridView控件:使用自定義功能進行排序一個asp: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 
    } 
} 

當「正常」的排序代碼如下轉換DataSourceDataView和設置DataView.Sort = e.SortExpression等,例如常見的模式:allow sorting by column gridview

那麼我的「特殊」排序代碼嗎?

更新:只是要清楚,我沒有問題滾動我自己的函數來比較兩個字符串,因爲我需要。然而,我不知道如何函數應用於我的數據網格/數據源。

回答

0

GridView允許DataKeyNames,這就是這裏的解決方案。當設置數據源時(在我的情況下,一個SQL查詢)包括「FullId」和「PlainId」,它已經剝離了前導字符並將餘數解析爲int。使用「FullId」作爲列的文本值,但將「PlainId」作爲DataKeyNames之一,並將其​​用作該列的SortExpression

相關問題