我目前有一个由存储过程填充的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,以便列现在是一个整数。但是,现在它将空值放在数字之前。如果可以切换,我会被设置。
答案 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