2011-05-11 70 views
0

我有一个大的VB/SQL应用程序,我创建了一个问题。我有一个程序表,他们有一个活动的标志。该标志可以通过用户屏幕切换。其他屏幕访问此表以填充下拉菜单。这些值作为ID字段(PK)存储在表中。我遇到的问题是我选择基于活动标志的下拉值。如果我选择了一个记录,该记录中存储了一个已经失效的过程,我会将旧对象未设置为实例....错误。VB - 如何测试值不在下拉

我希望能够做的是在填充下拉列表时检查记录中的值,并允许通过绕过SQL错误显示记录并仅将下拉值显示为空白而不更改记录本身。我希望我有道理。代码如下 - 非常香草的东西,但是我在成为系统管理员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

我不是你的方法完全清楚,但有人猜测,问题似乎在这条线上:

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 

希望这有助于!

+0

rskar,这似乎是正确的方向。但是“没什么”不会奏效。在从该视图选择时,返回一个有效的值。我想我需要添加列/逻辑到表和操作反对它的SP。如果过程被标记为不活动,则由于库代码中的WHERE ISNULL条件,从select返回的值不在下拉列表中。而且由于历史问题,我无法更新表格值(对于旧案例,过程仍然有效,但对于新案例,则无效)。旧案件需要可访问。 – 2011-05-11 17:14:01

+0

@rskar,我没有把@标志放在你的名字前面。感谢您的意见,并看到我上面的评论。 – 2011-05-11 18:02:08

+0

@Joel - 你的意思是说你需要展示一个“不活跃”的选择,以便记录 - 曾经一度 - 现在已经将非活动过程作为其价值之一? – rskar 2011-05-11 18:13:48