我想在C#中将DataTable
转换为List<object>
。这是我的代码。但它没有用。请帮帮我
public List<object> ShowMessage()
{
List<object> obj = new List<object>();
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Rows.Add("1","AAA");
dt.Rows.Add("2", "BBB");
dt.Rows.Add("3", "CCC");
foreach (DataRow dr in dt.Rows)
{
obj.Add(dr);
}
return obj;
}
这是错误 -
答案 0 :(得分:20)
如果列表对象有任何类型数据类型,就像这样
public class MyObj
{
public string Name { get; set; }
public int ID { get; set; }
}
然后你可以这样做
private List<MyObj> test(DataTable dt)
{
var convertedList = (from rw in dt.AsEnumerable()
select new MyObj()
{
ID = Convert.ToInt32(rw["ID"]),
Name = Convert.ToString(rw["Name"])
}).ToList();
return convertedList;
}
或者如果您仍然需要List<object>
,那么就这样做
private List<object> GetListByDataTable(DataTable dt)
{
var reult = (from rw in dt.AsEnumerable()
select new
{
Name = Convert.ToString(rw["Name"]),
ID = Convert.ToInt32(rw["ID"])
}).ToList();
return reult.ConvertAll<object>(o => (object)o);
}
答案 1 :(得分:6)
我希望你要做的是将数据表中的对象(可能是从查询中返回)插入到List中。
public List<object> ShowMessage2(DataTable dtInput)
{
List<object> objectList = new List<object>();
foreach(DataRow dr in dtInput.Rows)
{
MyObj newObj = new MyObj();
newObj.ID = Convert.ToInt32(dr["ID"]); // Beware of the possible conversion errors due to type mismatches
newObj.Name = dr["Name"].ToString();
objectList.Add(newObj);
}
return objectList;
}
public class MyObj
{
public int ID { get; set; }
public string Name { get; set; }
}
刚看到你对这个问题的补充!我无法理解为什么你试图生成一个列表,如果你的意图只是在一个网格视图中显示数据,你可以在一行中做到这一点!!!
List<object> obj = new List<object>();
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Rows.Add("1", "AAA");
dt.Rows.Add("2", "BBB");
dt.Rows.Add("3", "CCC");
dataGridView1.DataSource = dt; // THIS IS ALL U NEED! Just bind the DataTable to the grid as data source!
答案 2 :(得分:2)
在将DataRow添加到DataRow集合之前,需要先创建它。
例如,
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
var dr = dt.NewRow();
dr[0] = "1";
dr[1] = "AAA";
dt.Rows.Add(dr);
... likewise
foreach (DataRow dr in dt.Rows)
{
obj.Add(dr);
}
现在列表应该保持行。如果有效,请告诉我。