我有一个大的VB / SQL应用程序,我已经创建了一个问题。我有一个程序表,它们上面有一个活动标志。可以通过用户屏幕切换此标志。其他屏幕访问此相同的表以填充下拉列表。值作为ID字段(PK)存储在表中。我遇到的问题是我正在根据Active标志选择下拉值。如果我选择一个存储在其中的过程已经变为非活动状态的记录,我将旧的对象设置为实例....错误。
我希望能够做的是在填充下拉列表时检查记录中的值,并允许通过绕过SQL错误显示记录,只显示下拉值为空白而不改变记录本身。我希望我有意义。代码在下面 - 非常香草的东西,但我回到应用程序编程后,作为SysAdmin 20年,我仍然生锈。
图书馆代码
Public Function GetDropDownList(ByVal strDropDownList As String, _
ByRef objSession As System.Web.SessionState.HttpSessionState) As String
Dim strSQL As String = ""
Select Case strDropDownList
Case "SurgicalProcedure_ID"
strSQL = "SELECT [ID]=0,[Description]='' " _
& "UNION " _
& "SELECT [ID],[Description] " _
& "FROM dbo.viw_List_SurgicalProcedures " _
& "WHERE ISNULL(Active,0) = 1 " _
& "ORDER BY [Description] ASC"
VB代码隐藏
With objSqlCommand
.Connection = mobjSqlConnection
.CommandText = "SELECT * " _
& "FROM dbo.viw_tblCaseProcedure " _
& "WHERE [ID] = " & Session("CASE_ID").ToString
.CommandType = CommandType.Text
End With
objSqlDataAdapter = New SqlDataAdapter(objSqlCommand)
objSqlDataAdapter.Fill(objSqlDataSet)
objSqlDataRow = objSqlDataSet.Tables(0).Rows(0)
objDropDownList = Me.SurgicalProcedure_ID
strStringValue = objSqlDataRow("SurgicalProcedure_ID").ToString()
If strStringValue = "" Then strStringValue = "0"
objDropDownList.Items.FindByValue(strStringValue).Selected = True
提前感谢任何建议, 乔尔
答案 0 :(得分:0)
我对你的方法并不完全清楚,但是在猜测时,问题似乎就在这一行:
objDropDownList.Items.FindByValue(strStringValue).Selected = True
首先要做的是避免Object Not Set错误:
Dim ddlItem as ListItem = objDropDownList.Items.FindByValue(strStringValue)
If ddlItem Is Nothing Then
' Insert 'blank item' code here
Else
ddlItem.Selected = True
EndIf
希望这有帮助!