2013-01-25 43 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

相关问题