2012-08-22 2 views
5

:Neden DataRow bir yöntemin bir bölümünde tanınan ancak başka bir (nasıl dinamik olarak DataRow ekleyebilirsiniz)? Bu kod ile

OracleDataTable dt = PlatypusSchedData.GetAvailablePlatypi(); 
OracleDataTable outputDt = new OracleDataTable(); 

int iRows = 12; 
while (iRows > 0) 
{ 
    outputDt.Rows.Add(new DataRow()); // line 1 
    //var dr = new DataRow();  // line 2a 
    //outputDt.Rows.Add(dr);  // line 2b 
    iRows -= 1; 
} 

for (int i = 0; i < dt.Rows.Count; i += 1) { 
    DataRow dr = dt.Rows[i]; 
    int outputColumn = 0; 
    if (i % 12 == 0 && i > 0) { 
     outputColumn += 1; //2? 
    } 
    outputDt.Rows[i % 12][outputColumn] = dr[0]; 
    outputDt.Rows[i % 12][outputColumn + 1] = dr[1]; 
} 
dataGridView1.DataSource = outputDt; 

... ı (satır 2a ve diye 2B) hat 1 kullanılarak ya da (hat 1 açıklanır) ile 2a ve 2b çizgileri kullanılarak bu derleme hata:

'System.Data.DataRow.DataRow (System.Data.DataRowBuilder)' Bu döngü için tolere edilir içinde DataRow çünkü beni baffling bulunması dolayısıyla koruma seviyesine

için erişilemez. Nasıl OracleDataTable bu DataRow ekleyebilirim?

cevap

19

DataRow yapıcısı protected internal olarak işaretlenmiştir ve bu nedenle doğrudan yapılandıramazsınız.

doğru kod

bir DataTable için yeni bir satır ben OracleDataTable aşina değilim

DataRow dr = dt.NewRow(); 
3

olduğunu almak için ama normal bir DataTable devraldığı varsayalım. Yapıcı protected çünkü

Doğrudan bir DataRow oluşturamazsınız. Bunun yerine DataTable.Rows.Add veya DataTable.NewRow gibi fabrika yöntemlerden birini kullanmalıdır. Bu onun DataTable belirlenen çünkü doğru şema yeni DataRow uygulanır olmasını sağlar.

Yani bu çalışması gerekir:

while (iRows > 0) 
{ 
    DataRow dr = outputDt.NewRow(); 
    // fill the fields of the row ... 
    // add it to the DataTable: 
    outputDt.Rows.Add(dr); 
    iRows -= 1; 
}