使用VB.Net获取Gridview中订单ID的行号



我需要在Gridview中显示特定orderID的行号。我希望将其存储为会话变量:

session("rownum"0)

然而,作为一个初学者,我对如何根据QueryString中的OrderID检查Guid OrderID有点困惑。我需要将其更改为标签吗?我得到错误:

System.NullReferenceException: Object reference not set to an instance of an object.

感谢您的帮助。

<asp:SqlDataSource ID="DSOrders" runat="server" ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" SelectCommand="SELECT     TOP (100) PERCENT tblOrders.OrderID, tblOrders.stallmessage, tblOrders.price, tblAccounts.city, tblAccounts.postcode, tblAccounts.phoneNumber, tblOrders.orderDate, tblOrders.orderStatus, tblOrders.type, tblOrders.timeFor, tblOrders.paid, tblOrders.tblNo
FROM tblOrders INNER JOIN
tblAccounts ON tblOrders.accountID = tblAccounts.AccountID
WHERE tblOrders.orderStatus='Completed'
ORDER BY tblOrders.orderDate ASC">
</asp:SqlDataSource>
<asp:GridView ID="gdvOrders" width="100%" runat="server"ShowHeaderWhenEmpty="True" EmptyDataText="No orders" AllowPaging="True" AutoGenerateColumns="False" CssClass="mGrid" DataKeyNames="orderID" DataSourceID="DSOrders" PageSize="20" AllowSorting="True">
<AlternatingRowStyle CssClass="alt" />
<Columns>    
<asp:BoundField DataField="orderID" HeaderText="OrderID" />
.
.
</Columns>
</asp:GridView>

VB。净

session("rownum")=0
For Each r As GridViewRow in gdvOrders.Rows
If r.RowType = DataControlRowType.DataRow Then 
Dim orderID As Label
orderID = r.Cells(0).FindControl("orderID") 
If orderID.text = Request.Querystring("orderID")
session("rownum") = session("rownum") + 1
End If
End If
Next r

我是通过使用TemplateField来实现这一点的:

<asp:GridView ID="gdvOrders" width="100%" runat="server" style="font-size:1.5em" ShowHeaderWhenEmpty="True" EmptyDataText="No orders" AllowPaging="True" AutoGenerateColumns="False" CssClass="mGrid" DataKeyNames="orderID" DataSourceID="DSOrders" PageSize="20" AllowSorting="True">
<AlternatingRowStyle CssClass="alt" />
<Columns>    
<asp:TemplateField HeaderText="OrderID">
<ItemTemplate>
<asp:Label ID="lblOrderID" text='<%# Eval("orderID").ToString %>' runat="server" ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

通过使用FindControl,您只能使用文档中提到的ID值来获得控制:

使用指定的id参数。

所以我认为您想要获得行文本值,而不是控制文本

Dim orderID = r.Cells(0).Text 
If orderID = Request.Querystring("orderID")
session("rownum") = session("rownum") + 1

最新更新