2014-09-30 67 views
0

簡單的問題。ASP.NET VB DropdownList

我有一個下拉列表,我想在page_load上設置它的值。

<asp:DropDownList ID="SubmissionTypeDD" runat="server"></asp:DropDownList> 

我使用一些數據庫值填充這個下拉菜單中,目前22,17和44

現在我想在Page_Load中顯示的下拉菜單的選擇的值是 「17」

SubmissionTypeDD.SelectedValue = "17" 

這不工作,無論如何它默認爲最高值。

我試過把這個放在「If IsPostBack = False Then」但沒有成功。

這是我使用填補了DD代碼:

Dim readIntoTable As New SqlCommand("SELECT DISTINCT submissionTypes FROM dbo.submissionTypes ORDER BY submissionTypes ASC", conn) 
conn.Open() 

SubmissionTypeDD.DataSource = readIntoTable.ExecuteReader 
SubmissionTypeDD.DataTextField = "submissionTypes" 
SubmissionTypeDD.DataBind() 

conn.Close() 

乾杯!

+0

您可以顯示如何填充下拉列表的代碼? – sr28 2014-09-30 16:02:25

+0

添加了DD的代碼 – levis84 2014-10-01 08:53:28

+0

代碼的填充位置在哪裏? – sr28 2014-10-01 15:09:59

回答

0

對不起,浪費大家的時間。我在數據庫中設置的值有拖尾空白,我沒有修剪,所以它實際上是類似於「77      」而不是「77」

0

PreRenderComplete事件中執行此操作,而不是頁面Load事件。數據綁定通常不會發生,直到之後的加載事件,並且將數據庫中的值綁定到下拉列表中,取代您的SelectedValue選項。如果您在PreRender上執行該操作,則數據綁定已經完成,並且選擇將保持不變。

documentation

PreRenderComplete

募集後的各數據綁定控件了DataSourceID屬性的設置調用其DataBind方法。有關更多信息,請參閱本主題後面的數據綁定控件的數據綁定事件。

此外,這整個設計的東西開始聞到我。來自數據庫的項目都是動態的,或者不是。如果他們是動態的,你怎麼知道使用「17」?您可能更適合在列表中添加一列,您可以在其中指定默認值,只需對結果進行排序,以使默認值位於頂部或使用其他代碼強制根據該列選擇該列。如果項目不是動態的,爲什麼還要打擾DB呢?只是硬編碼整個列表。我更瞭解數據驅動的聲音,但這也是性能下滑,YAGNI。

+0

不幸的是,這似乎沒有做任何事情。 – levis84 2014-09-30 15:59:45

+0

@ levis84我的錯誤:我只是檢查[文檔](http://msdn.microsoft.com/en-us/library/vstudio/ms178472.aspx),而且應該是'PreRenderComplete'。 PreRender也會在數據綁定之前立即發生。我會更新我的答案。 – 2014-09-30 16:06:51

0

嘗試使用列表項和Selected設置爲True

Dim liValue As ListItem = SubmissionTypeDD.Items.FindByValue("17") 
If (liValue IsNot Nothing) Then 
    liValue.Selected = True 
End If 
+0

我不認爲這是解決方案,因爲我從數據庫中獲取數據,因此它是動態的。 – levis84 2014-09-30 16:00:20

+0

只需用數據庫中的值替換「17」即可。 – 2014-09-30 16:03:38

+0

OP中的整個設計開始讓我有些不適。來自數據庫的項目都是動態的,或者它們不是。如果他們是動態的,你怎麼知道使用「17」?如果他們不是,爲什麼要打擾DB呢? – 2014-09-30 16:10:11

0

確保您設置selectedValue屬性的下拉列表中發生的任何數據綁定了。如果您在數據綁定之前設置了selectedValue屬性,那麼將被新數據綁定覆蓋。

如果您不知道如何正確填寫您的下拉列表,請參閱本出色答卷: Databind a dropdownlist