2012-10-11 40 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! 
相關問題