在Gridview中以数字方式对数据绑定文本框进行排序

时间:2014-08-14 14:07:43

标签: asp.net vb.net sorting gridview databound

我目前有一个由存储过程填充的gridview。此存储过程不能更改。在我的页面上,我有一个下拉框。此下拉列表包含gridview的所有列名称。当用户单击某个值时,gridview将按该列排序。

所有这一切都没有问题。但是,当我尝试按时间顺序对其中一列进行排序时会出现问题。我有这个:

<asp:TemplateField HeaderText="RollNo" SortExpression="RollNo" >
        <ItemTemplate>
             <asp:TextBox ID="RollNoBox" runat="server" MaxLength="2" AutoCompleteType="None"  Width="35px"
               Text='<%# Bind("RollNo") %>'>
             </asp:TextBox>
        </ItemTemplate>
 </asp:TemplateField>

当我点击此列进行排序时,它的行为如下:

    Original:               Actual Sorted:  
    1                             null
    2                             null
    3                             null
    4                             null
    5                             1
    6                             2
    7                             3
    8                             4
    9                             5
    10                            6 
    11                            7 
    null                          8
    null                          9
    null                          10
    null                          11

但是,我希望排序是原始的SAME(所以我可以添加其他过滤器)。

我该怎么做?

这是我的排序功能:

Protected Sub SortGrid()
    Dim sortexpression As String
    If DropDownList1.SelectedValue <> "Select" Then
        sortexpression = DropDownList1.SelectedValue
    End If

        M1SchedView.Sort(sortexpression, SortDirection.Ascending)

End Sub

这与我的实际功能有点不同,因为我的页面中有多种排序。

编辑:我能够编辑SP,以便列现在是一个整数。但是,现在它将空值放在数字之前。如果可以切换,我会被设置。

2 个答案:

答案 0 :(得分:2)

RollNo似乎是string

添加另一个属性int RollNoNumeric并将其定义为

public int RollNoNumeric
{
    get { return string.IsNullOrEmpty(this.RollNo) 
              ? int.MaxValue 
              : Convert.ToInt32(RollNo); }
}

然后将SortExpression更改为

SortExpression="RollNoNumeric"

答案 1 :(得分:2)

RollNo是一个字符串,将其转换为数字

<%# Bind("RollNo", "{0:N2}") %>

http://msdn.microsoft.com/en-us/library/2d76z3ck(v=vs.110).aspx