2014-09-10 49 views
1

編輯:對不起,我對這件事有點瞎了,我在「問題」下面發佈了「解決方案」。C#使用單獨的方法將行/列添加到現有的DataTable中

ORIGINAL:

我似乎無法得到這個問題的背後(上SO搜索了很多後偶數): 我有,我想「準備」的人口數據,像這樣一個DataTable對象:

我的模型類屬性(類名 「DataMdl」):prepdatatable在一個視圖模型法

private static DataTable _datatbl; 
    public DataTable datatbl 
    { 
     get { return _datatbl; } 
     set 
     { 
      _datatbl = value; 
      OnPropertyChanged(new PropertyChangedEventArgs("datatbl")); 
     } 
    } 

電話:

prepdatatable(DataMdl.datatbl, 5, 9) 

我prepdatatable方法:

private void prepdatatable(DataTable dt, int rowcount, int colcount) 
    { 
     dt = new DataTable(); 

     int i = 0; 

     for (i = 0; i < colcount; i++) 
     { 
      dt.Columns.Add("col" + i); 
     } 

     for (i = 0; i < rowcount; i++) 
     { 
      dt.Rows.Add("row" + i); 
     } 
    } 

調用上面的方法我嘗試填充的方法將DataTable與

DataMdl.datatbl.Rows[0][0] = "..." 
    DataMdl.datatbl.Rows[0][1] = "..." 
    ... 
    DataMdl.datatbl.Rows[1][0] = "..." 
    ... 
    and so on 

稱爲prepdatatable在這種情況下後,我得到DataMdl.datatbl一個NullReferenceException 。

當我嘗試初始化DataMdl.datatbl的prepdatatable之外,我裏面得到一個NullReferenceException的「DT」裏面prepdatatable。

「解決方案」: 只是要prepdatatable返回一個DataTable,而不是無效,然後將其值賦給屬性DataMdl.datatbl:

private DataTable prepdatatable(int rowcount, int colcount) 
    { 
     var dt = new DataTable(); 

     int i = 0; 

     for (i = 0; i < colcount; i++) 
     { 
      dt.Columns.Add("col" + i); 
     } 

     for (i = 0; i < rowcount; i++) 
     { 
      dt.Rows.Add("row" + i); 
     } 

     return dt; 
    } 

DataMdl.datatbl = prepdatatable(5, 9); 

謝謝你的關心。

+1

你從哪裏得到這個例外?是'datatbl = new DataTable();'在將表傳遞給方法之前初始化表的唯一位置? – 2014-09-10 12:39:50

+0

您正在正確添加行和列。我認爲你正在傳遞'null'而不是數據表到這個方法 – 2014-09-10 12:40:50

+1

_「編輯:」datatbl「是我的模型類的一個屬性。」然後顯示相關的真實代碼而不是工作的代碼。我們無法解決不存在的問題。 – 2014-09-10 12:42:06

回答

0

你想在這裏做什麼?

for (i = 0; i < rowcount; i++) 
    { 
     var r = dt.NewRow(); 
     dt.Rows.Add(r); 
    } 

我有一種感覺,這是異常的來源。看看這個:How to add a new row to c# DataTable in 1 line of code?。看起來你正在嘗試添加一個沒有值的行。默認情況下,新行爲空,但已初始化。然後,您嘗試將其添加到數據表。爲什麼不像添加列那樣添加行?

0

假設這是你的數據表,在這裏你調用的方法

datatbl = new DataTable(); 
prepdatatable(datatbl, 5, 9); 

此方法不會拿數據表,它會採取一個副本來自它,你是按值發送DataTable的初始化沒有參考

private void prepdatatable(DataTable dt, int rowcount, int colcount) 
    { 
     int i = 0; 

     for (i = 0; i < colcount; i++) 
     { 
      dt.Columns.Add("col" + i); 
     } 

     for (i = 0; i < rowcount; i++) 
     { 
      var r = dt.NewRow(); 
      dt.Rows.Add(r); 
     } 
    } 

我會假設你的方法應該工作正常,問題只在參數發送方式 只是改變 的方法調用

prepdatatable(ref datatbl, 5, 9); 

的頭

private void prepdatatable(ref DataTable dt, int rowcount, int colcount) 
+0

非常感謝。是的,我認爲它應該是這樣的,不幸的是我得到一個錯誤,說一個屬性不能作爲參考傳遞。 – ChocoCaballero 2014-09-10 13:04:00

+0

你讓我在正確的軌道上,但我發佈了上面的「解決方案」。 – ChocoCaballero 2014-09-10 13:09:41

+0

很好聽 – Ateeq 2014-09-10 13:15:21

相關問題