0

私の DataTable オブジェクトは null のようですが、その理由がわかりません。3 つの変数を追加しようとしていますが、それでも null と表示されます。これが私のコードです:

    DataTable dt;

    DataSet ds = new DataSet();

    private void InitDataTable()
    {

        if (!File.Exists("gjesteInfo.xml"))
        {
            dt = new DataTable("Gjester");

            ds.ReadXml("gjesteInfo.xml");
            ds.Tables.Add(dt);

            DataColumn dc1 = new DataColumn("Fullt navn");
            DataColumn dc2 = new DataColumn("Start dato");
            DataColumn dc3 = new DataColumn("Antall dager");

            dt.Columns.Add(dc1);
            dt.Columns.Add(dc2);
            dt.Columns.Add(dc3);

            dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
            ds.Merge(dt);

            ds.WriteXml("gjesteInfo.xml");  
        }

        else
        {

            dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
            ds.Merge(dt); <- This is where I want to add information to the dataTable, and this is where the error shows up.

            ds.WriteXml("gjesteInfo.xml");
        }



    }

有名な「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーを回避する方法について何か提案はありますか?

4

3 に答える 3

1

if ステートメントの else 部分では、DataTable が初期化されていません
。しかし、主な問題は、ファイルが存在しない場合、それを読み取ろうとできないことです.....

if(!File.Exists("gjesteInfo.xml"))
{
     // The file doesn't exist, create the table to receive initial data here
     dt = new DataTable("Gjester");
     DataColumn dc1 = new DataColumn("Fullt navn");
     DataColumn dc2 = new DataColumn("Start dato");
     DataColumn dc3 = new DataColumn("Antall dager");
     dt.Columns.Add(dc1);
     dt.Columns.Add(dc2);
     dt.Columns.Add(dc3);
     dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
     ds.Tables.Add(dt);
}
else
{
    // The file exist, read the data and use the first table in the dataset to add new info
    ds.ReadXml("gjesteInfo.xml");
    dt = ds.Tables[0];
    dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
}
ds.Merge(dt);
ds.WriteXml("gjesteInfo.xml");

EDIT以下のコメントを見ると、テキストボックスには以前に入力されたすべてのデータが含まれているようです。この場合、xml ファイルを最初から書き直す必要があります。

if(File.Exists("gjesteInfo.xml"))
   File.Delete("gjesteInfo.xml")

dt = new DataTable("Gjester");
DataColumn dc1 = new DataColumn("Fullt navn");
DataColumn dc2 = new DataColumn("Start dato");
DataColumn dc3 = new DataColumn("Antall dager");
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
ds.Tables.Add(dt);
ds.Merge(dt);
ds.WriteXml("gjesteInfo.xml");
于 2013-04-22T17:49:31.633 に答える
1

そのelse部分に出くわした場合 -データテーブル オブジェクトを作成したことがありません! dtブロック内でインスタンス化するだけです....両方のケースで有効になるように、ステートメントのに呼び出しifを行う必要があります....dt = new DataTable()if

DataTable dt;
DataSet ds = new DataSet();

private void InitDataTable()
{
    dt = new DataTable("Gjester");  <<=== this **BEFORE** the if!

    if (!File.Exists("gjesteInfo.xml"))
    {
       ....... 
    }
    else
    {
       // now, in this case, "dt" has been created, and **NOW** you can operate on it!
       dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
       ds.Merge(dt); 
       ds.WriteXml("gjesteInfo.xml");
    }
于 2013-04-22T17:50:19.437 に答える
0

そのはず:

    else
    {
        dt = new DataTable("Gjester");
        dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
        ds.Merge(dt);
        ds.WriteXml("gjesteInfo.xml");
    }
于 2013-04-22T17:51:59.787 に答える