VB - 如何测试不在下拉列表中的值

时间:2011-05-11 14:28:19

标签: sql vb.net

我有一个大的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

提前感谢任何建议, 乔尔

1 个答案:

答案 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

希望这有帮助!