从DataTable填充SelectList

我运行了一个查询并返回了一个数据表,

myDataAdapter.Fill(myDataTable); 

现在,将行值“Value”和“Text”加载到SelectList中的最佳方法是什么?

谢谢

我找不到直接将DataTable绑定到SelectList的方法,所以我解决了创建Extension方法来完成此任务的方法:

 public static SelectList ToSelectList(this DataTable table, string valueField, string textField) { List list = new List(); foreach (DataRow row in table.Rows) { list.Add(new SelectListItem() { Text = row[textField].ToString(), Value = row[valueField].ToString() }); } return new SelectList(list, "Value", "Text"); } 
  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(); 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"); } 

我为你写了这个

假设您的DataTable有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 

这是我提出的它似乎运作良好,但我想知道这是否是最好的方式。

首先,我创建了一个看起来像我的查询结果的对象,

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

然后我创建一个ILIST并用数据表行填充它

 IList MyList = new List(); 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"); 

对这种方法有何评论?

看起来很好。 我会通过为MyTestObj创建一个接受DataRow的构造函数来使它更清晰。 那会让你写:

 MyList.Add(new MyTestObj(mydataRow)); 

这对我来说太迟了,但我认为这可能是一种优化的方式,希望它有效。

 List listName= new List(); 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() }); } 

您还可以通过应用另一个循环并将其用作数据表的列标识符的索引来循环遍历列名称。

谢谢。

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中的IdselectedValue列, NameDisplayMember列。