【问题标题】:Sorting databound textboxes in Gridview numerically对Gridview中的数据绑定文本框进行数字排序
【发布时间】: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


【解决方案1】:

RollNo 好像是string

添加另一个属性int RollNoNumeric 并定义它

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

然后将您的 SortExpression 更改为

SortExpression="RollNoNumeric"

【讨论】:

  • 我正在使用 VB.Net,这种语言是特定的吗?另外,我不知道如何实现这一点,我以前从未这样做过。
  • 如果您需要围绕 NULL 值进行自定义排序,这是解决方案,但是我建议您使用 RollNoForSort 或类似名称,因为您将(任意)值赋予 NULL 值,所以 @ 987654327@ 稍后可能会误导其他开发人员。我认为,Nullable(Of Int32) 类型的 RollNoNumeric 更适合该名称。
【解决方案2】:

RollNo 是字符串,转成数字

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

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

【讨论】:

  • 您是否使用数据表作为数据源?
  • 不,我正在使用一个 sqldatasource,它调用一个返回数据的存储过程。
  • 只是一个问题,可能会使这更容易一些,但是您是否使用文本框来允许用户输入?您可以将数据表作为数据源吗?问题是数据源中的 RollNo 列被视为字符串。编辑:数据库中的 RollNo 是什么数据类型?
  • 您需要更改存储过程以将其作为 int 拉取
  • 我所知道的唯一方法是代码比值得做的更多,因为您可以在将其数据绑定到 gridview 之前将过程调用到数据表中进行更改。以下是一个人的做法:forums.asp.net/t/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多