2012-09-12 51 views
0

我知道一個事實,下面的函數(Database.GetTables)正在帶回我想要的值。但是,當我嘗試對列表框進行綁定時,沒有填充它。我錯過了什麼?從數據源填充列表框的正確方法是什麼?如何從數據源填充ASP .NET中的列表框?

protected void ddlDatabase_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (ddlDatabases.SelectedIndex != 0) 
      { 
       lbxTables.DataSource = Database.GetTables(ddlServers.Text, ddlDatabases.Text); 
       ddlDatabases.DataValueField = "name"; 
       ddlDatabases.DataBind(); 
      } 
     } 

我也曾嘗試:

ddlDatabases.DataTextField = "name"; 

而且沒有運氣。

回答

2

你通過你的列表框控件設置數據源開始,但最終在下拉菜單中調用DataBind。

試試這個:

protected void ddlDatabase_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (ddlDatabases.SelectedIndex != 0) 
    { 
     lbxTables.DataSource = Database.GetTables(ddlServers.Text, ddlDatabases.value); 
     lbxTables.DataBind(); 
    } 
} 

您也可以前lbxTables.DataBind();

+0

我是否需要同時擁有DataValueField和DataTextField,還是隻能擁有一個或另一個? – Testifier

+0

我認爲,如果你不設置DataTextField,它將默認爲任何.ToString()在綁定ListBox的每個對象上返回的值。我會設置它。至於價值,我敢肯定,如果你沒有設置它,它將始終爲空。我會設置它們,我只是不知道GetTables方法返回的類是什麼。 – Gromer

0

你想綁定lbxTables或ddlDatabases嗎?在上面,您不會將任何數據綁定到僅設置數據源的列表框。相反,這樣做:

  lbxTables.DataSource = Database.GetTables(ddlServers.Text, ddlDatabases.Text); 
      lbxTables.DataTextField = "name"; 
      lbxTables.DataValueField = "name"; 
      lbxTables.DataBind(); 
+0

哇,我的愚蠢的錯誤。名字是不正確的(我正在複製和粘貼一些代碼,甚至沒有看到我沒有改變這個。)謝謝。 – Testifier

0

要得到的值,以示對一個列表框,你必須添加

lbxTables.DataBind() 
+0

謝謝!它是這個名字。 – Testifier

0

您正試圖下拉列表和列表框綁定添加在lbxTables那裏DataValueFieldDataTextField但你需要爲每個其中之一爲:

  1. 設置數據源(Database.GetTables(ddlServers.Text,ddlDatabas es.Text); )。

  2. 呼叫Control.Databind()對於需要綁定到數據源中的每個控制(這意味着一個用於下拉列表,一個用於列表框)

  3. 可選,設定的數據值和數據文本領域。

有一個好的一天,