2017-07-24 23 views
0

我已經在SO上搜索了常見問題,但它們與我的任務不匹配。 我有一個類與許多(約50)ValueTyped屬性。 有需要填寫一個new DataSet對象與類的屬性。從類項列表中填充數據集

舉例來說,如果我有這樣的:

public partial class MyClass 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
    // and other public properties 
} 

我需要兩個函數返回

  1. 填充DataSet與一單排單MyClass的項目。

  2. 對多個MyClass項目使用多行填充DataSet。


public partial class MyClass 
{ 
    public DataSet GenerateDataSet(MyClass source); 

    public DataSet GenerateDataSet(IEnumerable<MyClass> source); 
} 

我試着像下面很多解決方案,但它不能因爲DataRow編譯沒有公共構造函數。

var ds = new DataSet(); 
ds.Tables.Add(new DataTable("DataTableName")); 
var table = ds.Tables[0]; 
table.Rows.Add(new DataRow(new DataRowBuilder(table, 0))); 

回答

2
public partial class MyClass 
{ 
    public DataSet GenerateDataSet(MyClass source) 
    { 
     return GenerateDataSet(new[] { source }); 
    } 

    public DataSet GenerateDataSet(IEnumerable<MyClass> source) 
    { 
     DataSet ds = new DataSet(); 
     DataTable dt = new DataTable(); 
     ds.Tables.Add(dt); 
     dt.Columns.Add("Name"); 
     dt.Columns.Add("Id", typeof(int)); 
     // other columns... 
     foreach (MyClass c in source) 
     { 
      DataRow dr = dt.Rows.Add(); 
      dr.SetField("Name", c.Name); 
      dr.SetField("Id", c.Id); 
      // other properties 
     } 
     return ds; 
    } 
} 
+0

'的DataRow DR = dt.Rows.Add();'這是那魔碼字符串我一直在尋找最後一次。萬分感謝! – KamikyIT

+0

@KamikyIT:你也可以使用'dt.Rows.Add(c.Name,c.Id,...)'。但我更喜歡我的方法,因爲那樣你就可以指定不太容易出錯的列和它們的值。 –

+0

我會將您的答案標記爲正確(SO需要時間)。再次感謝! – KamikyIT