0

我的 DataTable 对象似乎为空,但我不明白为什么。我正在尝试向它添加三个变量,但它仍然说它是空的。这是我的代码:

    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");

编辑在下面看到您的评论,您的文本框似乎包含以前输入的所有数据。如果是这种情况,则需要从头开始重写 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 回答