[英]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.