2009-09-17 153 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柱。