2013-10-22 73 views
2

我有一個從數據庫中填充的下拉列表。我希望在只顯示下拉列表的DataTextField中的名字時工作。但是,如果我想顯示2個字段,名字和姓氏,那麼它會引發錯誤。爲什麼這不起作用,或者我怎麼才能使它起作用?從數據庫下拉列表,如何組合DataTextField的列?

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ConnectionString); 
SqlCommand cmd = new SqlCommand("SELECT * FROM tbl_customers", con); 
DataSet ds = new DataSet(); 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
con.Open(); 
da.Fill(ds, "Customers"); 
CustomerList.DataSource = ds.Tables[0]; 
CustomerList.DataTextField = "FirstName" + " " + "LastName"; 
CustomerList.DataValueField = "CID"; 
CustomerList.DataBind(); 

回答

4

你必須從數據庫中選擇「虛擬」列:

string sql = @"SELECT FirstName + ' ' + LastName AS FullName, 
         CID, FirstName, LastName 
       FROM tbl_customers 
       ORDER BY FullName ASC;" 
SqlCommand cmd = new SqlCommand(sql, con); 
// ... 
CustomerList.DataSource = ds.Tables[0]; 
CustomerList.DataTextField = "FullName"; 
CustomerList.DataValueField = "CID"; 
CustomerList.DataBind(); 
+0

這是完美的,非常感謝! –

+0

@TimSchmelter:如果我無法做出這樣的查詢,我想加入控件中的列。我該怎麼做? Zinov

0

你將要定義一個自定義列:

SqlCommand cmd = new SqlCommand("SELECT CID, FirstName + ' ' + LastName AS [FormattedName] FROM tbl_customers", con); 

然後,你可以綁定直接到該列:

CustomerList.DataTextFIeld = "FormattedName"; 
0

您可以使用數據庫複製方法,同時加入等距的列。

string sql = @"SELECT FirstName + replicate(' ', 20 - len(FirstName)) + LastName AS FullName, 
          CID, FirstName, LastName 
        FROM tbl_customers 
        ORDER BY FullName ASC;" 
    SqlCommand cmd = new SqlCommand(sql, con); 
    CustomerList.DataSource = ds.Tables[0]; 
CustomerList.DataTextField = "FullName"; 
CustomerList.DataValueField = "CID"; 
CustomerList.DataBind();