2011-05-11 54 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