2011-06-29 147 views
1

立足我的代碼下拉列表值我使用的數據綁定下拉列表值重複

Public Function get_type() As String 
     'get type 
     If IsPostBack = False Then 
      da = New OleDbDataAdapter("select (type) from prod_type", con) 
      da.Fill(ds, "prod_type") 
      ddtype.DataSource = ds 
      ddtype.DataTextField = "type" 
      ddtype.DataValueField = "type" 
      ddtype.DataBind() 
      da.Dispose() 
      ds.Dispose() 
      con.Close() 
     End If 

我調用這個函數在頁面加載

+2

歡迎來到堆棧溢出。如果你有問題請說明。 – naveen

+0

你正在存儲你的DataSet f.e.在會話中? @naveen:問題是爲什麼DropDownList中的值重複。我假設DataSet沒有被清除,因爲他將它存儲在Session中,甚至存儲在Cache中。 –

+0

@Tim Schmelter no – evigneesh

回答

0

修改這樣的:

Public Function get_type() As String 
    'get type 
    If IsPostBack = False Then 
     ds.Clear() //new 
     ddtype.Items.Clear() //new 
     da = New OleDbDataAdapter("select (type) from prod_type", con) 
     da.Fill(ds, "prod_type") 
     ddtype.DataSource = ds 
     ddtype.DataTextField = "type" 
     ddtype.DataValueField = "type" 
     ddtype.DataBind() 
     da.Dispose() 
     ds.Dispose() 
     con.Close() 
    End If 

如果你仍然有重複的條目應該是因爲你在數據庫中的重複。

+0

謝謝我的問題擱置 – evigneesh

+0

@evigneesh你的歡樂!在此函數調用時,您可能在數據集中存在殘留數據。 –

+0

我明白了你的觀點 – evigneesh

1

編輯:忽視這一點,這是錯誤的:

這是一個不是asp.net或VB問題的SQL問題。 您的sql將不會從您的prod_type表中選擇唯一的「類型」。執行以下SQL:

select distinct(type) from prod_type 

又看了張貼常見問題解答:https://stackoverflow.com/faq

+0

感謝您提供寶貴的答案但是這也無法正常工作 – evigneesh

+0

@evigneesh您是否看到兩個查詢的不同結果或相同? – Raoul

+0

一樣的,因爲我的表不具有重複值 – evigneesh

0

有兩種情況下值將在這裏DropDownList複製:在

  1. 有重複值數據庫。

  2. 您在第一次加載頁面時多次調用該函數。

您可以通過在你的SELECT語句中使用DISTINCT解決第一種情況:

SELECT DISTINCT type FROM prod_type 

您可以通過TableAdapter.ClearBeforeFill屬性的值設置爲真正解決第二個。

+0

這兩樣東西我檢查 – evigneesh

+0

如何使用這個屬性TableAdapter.ClearBeforeFill – evigneesh

+0

@evigneesh:忘掉它。在初始化數據適配器之前,請改變以下內容:'ds.Tables [「prod_type」]。Clear();' –