如何添加行号行,并按其排序

时间:2015-05-26 21:35:31

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

我有一个Grid-view,我最近为rowNo

添加了一个新列
<asp:TemplateField HeaderText="RowNo" ItemStyle-HorizontalAlign="left">
    <ItemTemplate>
        <asp:Literal ID="lblRowNo" runat="Server"></asp:Literal>
    </ItemTemplate>
</asp:TemplateField>

rowNo应该允许排序功能,就像其他列一样。

我在Order对象中添加了一个属性:

&#39; RowNo     公共rowNoVal As Integer     公共属性rowNo As Integer         得到             返回rowNoVal         结束了         设置(ByVal值为整数)             rowNoVal = value         结束集     结束财产

我在Data-Bound事件中设置rowNo属性,然后将其分配给rowNo项模板:

e.Row.DataItem.rowNo = e.Row.RowIndex + 1
DirectCast(e.Row.FindControl("lblRowNo"), Literal).Text = 
e.Row.DataItem.rowNo

这由rowNo(asc)显示:

RowNo   Created
1       5/29/2015 9:00:20 AM
2       5/29/2015 9:30:48 AM
3       5/29/2015 9:33:04 AM
4       5/29/2015 9:39:05 AM
5       5/29/2015 10:20:21 AM
6       5/29/2015 11:29:25 AM
7       5/29/2015 11:52:20 AM

并通过rowNo(desc):

RowNo   Created
1       5/29/2015 11:52:20 AM
3       5/29/2015 10:20:21 AM
2       5/29/2015 11:29:25 AM
4       5/29/2015 9:39:05 AM
5       5/29/2015 9:33:04 AM
6       5/29/2015 9:30:48 AM
7       5/29/2015 9:00:20 AM

订单将按排序事件重新排序,但行号始终按升序排列。

感谢您的帮助。

更新/解决方案

  1. 添加了j.f.的循环。发布到GetOrders()方法。

    Dim i As Integer
    i = 1
    
    For Each order As Order In orderList.Items
        order.rowNo = i
        i += 1
    Next
    Me.gdvHeaders.Visible = True
    Me.gdvHeaders.DataSource = orderList.Items
    Me.gdvHeaders.DataBind()
    
  2. 从网格视图的数据绑定事件中删除了rowNo的增量和赋值:

    'Add rowNo
    e.Row.DataItem.rowNo = e.Row.RowIndex + 1
    DirectCast(e.Row.FindControl("lblRowNo"), Literal).Text = 
    e.Row.DataItem.rowNo
    
  3. 将#2替换为:

    DirectCast(e.Row.FindControl("lblRowNo"), Literal).Text = 
    e.Row.DataItem.rowNo
    
  4. 现在我可以使用rowNo列对ASC | DESC进行排序。

    非常感谢j.f.为我的问题找到解决方案的帮助和耐心。

1 个答案:

答案 0 :(得分:1)

很难说出你的逻辑如何与我现在看到的一样,但你需要在初始绑定之前分配行号值。我想象着这些方面的东西:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        BindGridViewInitial()
    End If

End Sub


Protected Sub BindGridViewInitial()

    List(Of Order) orders = Me.GetOrders()
    int i = 1;

    For Each order As Order In orders
        order.rowNo = i;
        i++;
    Next

    Me.gdvHeaders.DataSource = orders;
    Me.gdvHeaders.DataBind();

End Sub

每个Order将拥有自己的行号,您应该可以像使用其他任何属性一样使用它。

当您在GridView的DataBound处理程序中分配行号值时,您所做的就是每次绑定GridView时重新分配值,从而导致值被覆盖。