2012-10-11 35 views
0

我想将C#中的DataTable转换为List<object>。这是我的代码。但它不起作用。请帮我如何将DataTable转换为C#中的对象类型列表#

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; 
} 

这是Error--

enter image description here

+1

你的对象是哪一种类型?它如何不工作? –

+1

哪部分不工作?该代码看起来不错。 –

+0

你有任何错误信息?你有没有试过调试它?从我的角度来看,一切都应该没问题...... – besworland

回答

18

如果您有任何类型化的数据类型列表对象是这样的

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); 
    } 
+0

感谢您的帮助 –

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); 
     } 

现在名单应持有的行。让我知道它是否有效。

+0

Thansk ...为您的帮助。 –

6

我希望你想要做的是将对象插入数据表(哪个p从一个查询返回)到一个列表。

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! 
相关问题