Scr*_*ppy 1 vb.net asp.net datareader
在决定将什么输入到 ASP.net 的下拉列表中之前,我试图检查字段的值。
我正在使用 datareader.Read() 来读取记录集,这样我就可以做到这一点。但是,这会跳过第一行数据。. 下拉框基本上是尺寸和颜色的列表。. . 所以目前我缺少第一个尺寸。
这是代码:
Using cmd As New SqlCommand("doGetAllSizesForProduct", oConn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@id", CType(Request.QueryString("id"), Integer))
oConn.Open()
Using dr As SqlDataReader = cmd.ExecuteReader()
If dr.HasRows() = True Then
dr.Read()
ddlSize.Visible = True
pnlSize.Visible = True
pnlNoStock.Visible = False
If dr("colour") = "None" Then
ddlSize.DataTextField = "size"
Else
ddlSize.DataTextField = "sizeColour"
End If
ddlSize.DataValueField = "mapperid"
ddlSize.DataSource = dr
ddlSize.DataBind()
Else
End If
dr.Close()
End Using
End Using
Run Code Online (Sandbox Code Playgroud)
我想要么必须有除 Read 之外的另一种方法,要么有一种方法可以阻止它跳过第一条记录?
我从未见过将数据读取器用作数据源。我认为正在发生的是,您的第一个呼叫dr.Read()是按预期跳到第一条记录。但是,当您将读取器指定为数据源时,它会在dr.Read()内部执行自己的逻辑,从下一条记录开始。这可以解释为什么您没有看到第一项。尝试像这样修改您的代码以使用 DataTable 代替(警告,没有对此进行测试):
using dr as SqlDataReader = cmd.ExecuteReader()
if dr.HasRows() then
ddlSize.Visible = True
pnlSize.Visible = True
pnlNoStock.Visible = False
While dr.Read()
dim Value as string = dr("mapperid")
dim Text as string = if(dr("colour") = "None",dr("size"),dr("sizeColour"))
ddlSize.Items.Add(New ListItem(Text, Value))
End While
end if
dr.Close()
end using
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8652 次 |
| 最近记录: |