如何添加行号行,并按它排序
how to add a line number row, and sort by it
我有一个网格视图,我最近为 rowNo 添加了一个新列
<asp:TemplateField HeaderText="RowNo" ItemStyle-HorizontalAlign="left">
<ItemTemplate>
<asp:Literal ID="lblRowNo" runat="Server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
rowNo 应该允许排序功能,就像其他列一样。
我向我的订单对象添加了一个 属性:
'行号
Public rowNoVal 作为整数
Public 属性 rowNo 作为整数
得到
Return rowNoVal
结束获取
设置(ByVal 值作为整数)
rowNoVal = 值
结束集
结束属性
我在 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
排序事件正在对订单进行重新排序,但行号始终保持升序。
感谢您的帮助。
有解决方案的更新
添加了 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()
从网格视图的数据绑定事件中删除了 rowNo 的增量和赋值:
'Add rowNo
e.Row.DataItem.rowNo = e.Row.RowIndex + 1
DirectCast(e.Row.FindControl("lblRowNo"), Literal).Text =
e.Row.DataItem.rowNo
将 #2 替换为:
DirectCast(e.Row.FindControl("lblRowNo"), Literal).Text =
e.Row.DataItem.rowNo
现在我可以使用 rowNo 列对 ASC|DESC 进行排序。
非常感谢 j.f。感谢您的帮助和耐心努力解决我的问题。
很难说出您的逻辑如何与我现在看到的一致,但您需要在初始绑定 之前分配行号值。我正在按照这些思路想象一些事情:
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 时重新分配值,导致值被覆盖。
我有一个网格视图,我最近为 rowNo 添加了一个新列
<asp:TemplateField HeaderText="RowNo" ItemStyle-HorizontalAlign="left">
<ItemTemplate>
<asp:Literal ID="lblRowNo" runat="Server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
rowNo 应该允许排序功能,就像其他列一样。
我向我的订单对象添加了一个 属性:
'行号 Public rowNoVal 作为整数 Public 属性 rowNo 作为整数 得到 Return rowNoVal 结束获取 设置(ByVal 值作为整数) rowNoVal = 值 结束集 结束属性
我在 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
排序事件正在对订单进行重新排序,但行号始终保持升序。
感谢您的帮助。
有解决方案的更新
添加了 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()
从网格视图的数据绑定事件中删除了 rowNo 的增量和赋值:
'Add rowNo e.Row.DataItem.rowNo = e.Row.RowIndex + 1 DirectCast(e.Row.FindControl("lblRowNo"), Literal).Text = e.Row.DataItem.rowNo
将 #2 替换为:
DirectCast(e.Row.FindControl("lblRowNo"), Literal).Text = e.Row.DataItem.rowNo
现在我可以使用 rowNo 列对 ASC|DESC 进行排序。
非常感谢 j.f。感谢您的帮助和耐心努力解决我的问题。
很难说出您的逻辑如何与我现在看到的一致,但您需要在初始绑定 之前分配行号值。我正在按照这些思路想象一些事情:
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 时重新分配值,导致值被覆盖。