none
下拉選單如何利用VB語法連SQL取得選單內的項目? RRS feed

  • 問題

  •  

    我的ASP.Net網頁中的下拉選單,本來是用SqlDataSource連資料庫取得選單中的內容,

    只要再選出"要顯示的欄位內容"及"選取後的值"即可讓下拉選單正常的在網頁中呈現,
    但是因為現在要改成連至Web Service提供的服務,不能用SqlDataSource去連,

    只能利用Web Service提供的類似以下這種:

    程式碼區塊
    Dim ds As DataSet = obj_DataBase.QueryDB("SQL語法", "資料表名稱")

     

     

    需利用這種方式查詢資料庫中的資料,

    所以想請問一下,有沒有大大知道怎麼用VB語法和上述的連資料庫方式去寫下拉選單的語法呢?

    2008年1月21日 下午 12:06

解答

  • HI,

     

    您可以在執行完:

     

    Dim ds As DataSet = obj_DataBase.QueryDB("SQL語法", "資料表名稱")

     

    後加入以下的程式

     

    DropDownList控制項.DataSource=ds.Tables(0)

    DropDownList控制項.DataTextField="要顯示的欄位內容"

    DropDownList控制項.DataValueField="選取後的值"

    DropDownList控制項.DataBind()

     

    就OK了

     

    tihs

    2008年1月21日 下午 12:24
  •  

    你去看一下我在三樓的程式碼用

    If Not IsPostBack Then

     

    end if

     

    如果不加這段 你只要postback後 就會又加10項

     

    不加的話

     也可以先清掉再加

     Me.DropDownList1.Items.Clear()

    2008年1月21日 下午 01:38

所有回覆

  • HI,

     

    您可以在執行完:

     

    Dim ds As DataSet = obj_DataBase.QueryDB("SQL語法", "資料表名稱")

     

    後加入以下的程式

     

    DropDownList控制項.DataSource=ds.Tables(0)

    DropDownList控制項.DataTextField="要顯示的欄位內容"

    DropDownList控制項.DataValueField="選取後的值"

    DropDownList控制項.DataBind()

     

    就OK了

     

    tihs

    2008年1月21日 下午 12:24
  •  

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Page.IsPostBack = False Then
                Dim objWS As New web.Service
                Dim objDS As Data.DataSet

                objDS = objWS.SQL_Command("SELECT *  FROM mytb  ORDER BY p_id")
               
                DropDownList1.DataSource = objDS.Tables(0).DefaultView
                DropDownList1.DataTextField = objDS.Tables(0).Columns(0).ToString
                DropDownList1.DataBind()


                objWS = Nothing
            End If
        End Sub

    2008年1月21日 下午 12:25
  •  

    感謝回覆,剛還正想上來自己幫自己解答,結果就有兩位大大回覆了!

     

    有其他大大提供給我用For廻圈寫的方法:

     

    程式碼區塊

            For index As Integer = 0 To DS.Tables(0).Rows.Count - 1
                Me.DDL.Items.Add(New ListItem(DS.Tables(0).Rows(index)("顯示欄位內容"), DS.Tables(0).Rows(index)("選取後的值")))
            Next

     

     

    雖然可以run了,但是...老實說,看不太懂那位大大提供的方法,

    有沒有大大可以替我解釋一下?(那個add是幹嘛用的啊?)

    2008年1月21日 下午 12:42
  •  

    例如 很多物件都有ADD方法 差不多都是加入至集合結尾的項目

      Dim items As New ArrayList()

                items.Add("One")
                items.Add("Two")
                items.Add("Three")

     

                Dim str As String
                For Each str In items
                    Me.DropDownList1.Items.Add(str)
                Next

     

    2008年1月21日 下午 01:27
  •  

    囧了...難怪...

    因為我的下拉選單所選的值,是另一個GridView的篩選條件,

    所以下拉選單會一直查詢,(利用一個button去觸發)

    可是...假設一開始下拉選單只有十筆資料,

    查詢一次後,下拉選單變二十筆資料...

    再一次...變三十筆......囧

    請問,這方法是不是有bug啊?

    有沒有什麼方法可以解決呢?(我是把這個For廻圈放在Page_Load)

    2008年1月21日 下午 01:35
  •  

    你去看一下我在三樓的程式碼用

    If Not IsPostBack Then

     

    end if

     

    如果不加這段 你只要postback後 就會又加10項

     

    不加的話

     也可以先清掉再加

     Me.DropDownList1.Items.Clear()

    2008年1月21日 下午 01:38