我有一个大型的VB/SQL应用程序,我在其中创建了一个问题。我有一个程序表,上面有一个活动标志。可以通过用户屏幕切换此标志。其他屏幕访问相同的表来填充下拉列表。这些值作为ID字段(PK)存储在表中。我遇到的问题是,我正在根据活动标志选择下拉值。如果我选择一个记录,该记录中存储了一个已成为非活动的过程,则将旧对象未设置为实例.错误。
我想要做的是在填充下拉列表时检查记录中的值,并允许通过绕过SQL错误来显示记录,并将下拉值显示为空白,同时不更改记录本身。我希望我说的有道理。代码就在下面--相当普通的东西,但是在做了20年的SysAdmin之后,我又回到了应用程序编程中,我仍然生疏了。
库代码
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谢谢你的建议,乔尔
发布于 2011-05-11 16:18:21
我不太清楚你的做法,但据猜测,问题似乎就在这一行上:
objDropDownList.Items.FindByValue(strStringValue).Selected = True首先应该这样做,以避免对象没有设置错误:
Dim ddlItem as ListItem = objDropDownList.Items.FindByValue(strStringValue)
If ddlItem Is Nothing Then
' Insert 'blank item' code here
Else
ddlItem.Selected = True
EndIf希望这能有所帮助!
https://stackoverflow.com/questions/5965898
复制相似问题