【发布时间】:2014-08-14 14:07:43
【问题描述】:
我目前有一个由存储过程填充的 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
但是,我希望排序与原始排序相同(因此我可以添加其他过滤器)。
我该怎么做?
这是我的排序函数:
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 进行编辑,以便该列现在是一个整数。但是,现在它将空值放在数字之前。如果这可以切换,我会被设置。
【问题讨论】:
-
向我们展示您的排序功能!
-
你的“RollNo”字段是一个字符串而不是一个数字,这就是它排序的原因。如果您无法更改 SP 以使其值为数字,则必须在代码中更改它。如果您使用某种类型的 EF,这应该很容易。如果您使用 sqldatasource 并让它填充数据,这并不容易。
-
我正在使用调用存储过程的 sqldatasource..
标签: asp.net vb.net sorting gridview databound