2013-04-24 29 views
0

我似乎無法理解爲什麼我得到:無法解決「未設置對象實例的對象引用」。在DataTable.Rows.CopyTo

「對象引用不設置到對象的實例。」

錯誤在這種情況下:

DataTable utenRomData; 
    DataSet utenRomSet; 


    private void InitDataUtenRom() 
    { 
     utenRomData = new DataTable("GjesterUtenRom"); 
     utenRomSet = new DataSet(); 

     utenRomData.Columns.Add(new DataColumn("FulltNavn")); 
     utenRomData.Columns.Add(new DataColumn("StartDato")); 
     utenRomData.Columns.Add(new DataColumn("AntallDager")); 

     utenRomSet.Tables.Add(utenRomData); 


     if (File.Exists("gjesteInfo.xml")) 
      utenRomSet.ReadXml("gjesteInfo.xml"); 

     utenRomData.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text); 

     utenRomSet.Merge(utenRomData); 
     utenRomSet.WriteXml("gjesteInfo.xml"); 
    } 

    DataTable medRomData; 
    DataSet medRomSet; 

    private void InitDataMedRom() 
    { 
     medRomData = new DataTable("GjesterMedRom"); 
     medRomSet = new DataSet(); 

     medRomData.Columns.Add(new DataColumn("FulltNavn")); 
     medRomData.Columns.Add(new DataColumn("StartDato")); 
     medRomData.Columns.Add(new DataColumn("AntallDager")); 

     medRomSet.Tables.Add(medRomData); 

     if (File.Exists("gjesteInfo.xml")) 
      medRomSet.ReadXml("gjesteInfo.xml"); 

     DataRow[] temp = new DataRow[medRomData.Rows.Count]; 

     utenRomData.Rows.CopyTo(temp, 0); <- This is where I get the error! 

     medRomSet.Merge(utenRomData); 
     medRomSet.WriteXml("gjesteInfo.xml"); 
    } 

我試圖擺脫表utenRomData內容表medRomData用拖放。有什麼想法嗎?

如何在InitDataMedRom()中實例化utenRomData?

+0

只有兩種選擇:'utenRomData'是'null' ,或者'utenRomData.Rows'爲'null'。 (如果'temp'爲'null',你會得到'ArgumentNullException',而不是'NullReferenceException'。)你不會在初始化'utenRomData'的地方顯示代碼,所以你必須檢查它是哪一個。 – dtb 2013-04-24 10:09:57

+0

我更新了代碼。 :) – Praise 2013-04-24 10:20:00

+0

您是否檢查了medRomData中有多少行?如果它爲零(因爲該文件不存在或因爲ReadXml添加了不同的表格)當您嘗試將許多行復制到空數組數據行時會發生什麼? – Steve 2013-04-24 10:20:15

回答

1

看起來像utenRomData沒有實例。

您可以檢查它是否由具有值:

if (utenRomData != null) { 
    utenRomData.Rows.CopyTo(temp, 0); 
    medRomSet.Merge(utenRomData); 
    medRomSet.WriteXml("gjesteInfo.xml"); 
} 

實例化的utenRomData一個新實例簡單地做:

if (utenRomData == null) { 
    InitDataUtenRom(); 
} 
+0

戴維斯:* FacePlant * Offcourse!可以相信我錯過了這一點。但是當它是另一種方法時,如何實例化utenRomData?我已經更新了代碼。 :) – Praise 2013-04-24 10:21:17

+0

@MariusMathisen - 只需添加一個檢查,看看它是否爲'null',如果是,請調用'InitDataUtenRom'(我已更新了我的答案) – 2013-04-24 10:24:28

+1

完美!這工作!謝謝。 – Praise 2013-04-24 10:39:33

相關問題