2009-09-17 142 views
3

我跑了查詢,並返回一個DataTable一個的SelectList,填充從數據表

myDataAdapter.Fill(myDataTable); 

現在什麼是加載行值「價值」和「文本」成的SelectList的最佳方式?

感謝

回答

1

這裏是我想出了它似乎運作良好,但我在想,如果這是最好的方法。

首先,我創建了一個對象,看起來像我的結果形成我的查詢,

public class MyTestObj 
{ 
    public string Value_CD { get; set; } 
    public string Text_NA { get; set; } 
} 

然後,我創建一個ILIST並與數據錶行

IList<MyTestObj> MyList = new List<MyTestObj>(); 
foreach (DataRow mydataRow in myDataTable.Rows) 
{ 
    MyList.Add(new MyTestObj() 
    { 
    Value_CD = mydataRow["Value"].ToString().Trim(), 
    Text_NA = mydataRow["Text"].ToString().Trim()      
    }); 
} 

return new SelectList(MyList, "Value_CD", "Text_NA"); 

這種方法的任何意見填充它?

2

假設你的數據表中有2列(文本和值),你必須

1. Set the DropDownList's DataSource to the table 
2. Set the DataTextField to the text column name 
3. Set the DataValueField to the value column name 
4. Call the Databind method 
+0

忘了提及我在MVC中做了這個,並沒有使用控件 – 2009-09-17 15:11:03

+0

啊,這是一個非常重要的信息。你可能想編輯你的文章。 – 2009-09-17 15:15:46

+0

這是asp.net的方法而不是asp.net mvc。 – yogihosting 2015-07-27 10:59:22

0

看起來很好。我會通過爲接受DataRow的MyTestObj創建一個構造函數來使它更簡潔。這將使你寫:

MyList.Add(new MyTestObj(mydataRow)); 
4
public static System.Web.Mvc.SelectList DT2SelectList(DataTable dt, string valueField, string textField){    
     if (dt == null || valueField == null || valueField.Trim().Length == 0 
      || textField == null || textField.Trim().Length ==0) 
      return null; 


     var list = new List<Object>(); 

     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      list.Add(new 
      { 
       value = dt.Rows[i][valueField].ToString(), 
       text = dt.Rows[i][textField].ToString() 
      }); 
     } 
     return new System.Web.Mvc.SelectList(list.AsEnumerable(), "value", "text"); 
    } 

我寫了這對ü

7

我找不到到DataTable到的SelectList直接結合的方式,所以我解決了創建擴展方法來完成這樣的:

public static SelectList ToSelectList(this DataTable table, string valueField, string textField) 
{ 
    List<SelectListItem> list = new List<SelectListItem>(); 

    foreach (DataRow row in table.Rows) 
    { 
     list.Add(new SelectListItem() 
     { 
      Text = row[textField].ToString(), 
      Value = row[valueField].ToString() 
     }); 
    } 

    return new SelectList(list, "Value", "Text"); 
} 
+0

謝謝,這對我有很大的幫助 – roseliux 2015-04-12 23:53:18

0

它的方式太晚了我來回答,但我認爲這可能是一種優化的方式來做到這一點,希望工程。

List<SelectListItem> listName= new List<SelectListItem>(); 

for (int i = 0; i < datatableName.Rows.Count; i++) 
    { 
    listName.Add(new SelectListItem { Text = datatableName.Rows[i]["ColumnName"].ToString(), Value = datatableName.Rows[i]["ColumnName"].ToString() }); 
    } 

您也可以通過應用另一個循環並將其用作數據表的列標識符處的索引來遍歷列名稱。

謝謝。

0

Datatable包含擴展方法AsDataView。您可以使用此擴展方法從DataTable填充SelectList。的代碼的示例:

DataTable dt = new DataTable(); 
dt.Columns.Add("Id", typeof(string)); 
dt.Columns.Add("Name", typeof(string)); 
dt.Rows.Add("1", "test"); 
//populate selectlist with DataTable dt 
var selectList = new SelectList(dt.AsDataView(), "Id", "Name"); 

這裏標識的SelectList了selectedValue柱和名稱DisplayMember柱。