簡體   English   中英

如何在不覆蓋現有記錄的情況下向數據表添加新行

[英]How to add new row to data table without overwriting the existing record

我正在嘗試將新記錄添加到數據表。 數據記錄將顯示在數據網格視圖中並寫入XML文件。 每次單擊按鈕創建一條記錄時,都會創建一條記錄,但是它將覆蓋現有條目,而不是添加新記錄。 如何在不覆蓋現有記錄的情況下向數據表添加新行?

    public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void buttonCreate_Click(object sender, EventArgs e)
    {
        //create the DataTable
        DataTable dt = new DataTable("Contact");
        //dt.TableName = "Contact";

        //create columns for the DataTable
        DataColumn dc1 = new DataColumn("Id");
        dc1.DataType = System.Type.GetType("System.Int32");
        dc1.AutoIncrement = true;
        dc1.AutoIncrementSeed = 1;
        dc1.AutoIncrementStep = 1;
        DataColumn dc2 = new DataColumn("Name");
        DataColumn dc3 = new DataColumn("Age");
        DataColumn dc4 = new DataColumn("Gender");

        //add columns to the DataTable
        dt.Columns.Add(dc1);
        dt.Columns.Add(dc2);
        dt.Columns.Add(dc3);
        dt.Columns.Add(dc4);

        DataRow row;

        row = dt.NewRow();
        row["Name"] = textBoxName.Text;
        row["Age"] = textBoxAge.Text;
        row["Gender"] = textBoxGender.Text;

        dt.Rows.Add(row);
        //insert data in the row
        //dt.Rows.Add(null, textBoxName.Text, textBoxAge.Text, textBoxGender.Text);
        dataGridView1.DataSource = dt;

        //create DataSet
        DataSet ds = new DataSet();
        ds.DataSetName = "AddressBook";
        ds.Tables.Add(dt);

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

另外,我應該在表單事件中創建數據表嗎?

您的問題是,每次單擊該按鈕時,您都在重新創建數據表。 您應該將數據表聲明為Form1類的屬性,在Form1()方法中創建列(在創建表單時(即,在您啟動應用程序時)由.net框架調用),然后創建您的表。單擊按鈕上的新行,將其添加到數據表中,然后重置gridview以指向該數據表以對其進行刷新。

//create the DataTable
DataTable dt = new DataTable("Contact");
DataSet ds; 

public Form1()
{
    InitializeComponent();

    //create columns for the DataTable
    DataColumn dc1 = new DataColumn("Id");
    dc1.DataType = System.Type.GetType("System.Int32");
    dc1.AutoIncrement = true;
    dc1.AutoIncrementSeed = 1;
    dc1.AutoIncrementStep = 1;

    //add columns to the DataTable
    dt.Columns.Add(dc1);
    dt.Columns.Add(new DataColumn("Name"));
    dt.Columns.Add(new DataColumn("Age"));
    dt.Columns.Add(new DataColumn("Gender"));

    //create DataSet
    DataSet ds = new DataSet();
    ds.DataSetName = "AddressBook";
    ds.Tables.Add(dt);

}

private void buttonCreate_Click(object sender, EventArgs e)
{   
    DataRow row = dt.NewRow();
    row["Name"] = textBoxName.Text;
    row["Age"] = textBoxAge.Text;
    row["Gender"] = textBoxGender.Text;

    dt.Rows.Add(row);
    dataGridView1.DataSource = dt;
    ds.WriteXml("Contacts.xml");
}

由於這一行代碼,該記錄不斷被下一條記錄覆蓋:

 ds.WriteXml("Contacts.xml");

您需要附加到XML文件,而不是覆蓋它。 請參閱 stackoverflow帖子。

如果應用程序又快又臟,那么可以在按鈕處理程序中做任何您喜歡的事情。 但是,如果它是現實應用程序,那么您確實需要適當的應用程序架構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM