我有一个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
订单将按排序事件重新排序,但行号始终按升序排列。
感谢您的帮助。
更新/解决方案
添加了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.为我的问题找到解决方案的帮助和耐心。
答案 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时重新分配值,从而导致值被覆盖。