我有一个包含4个文本框的表单+带有11个列的datagridview。
从这里有一个方法来保存datagridview这个工作正常,但是有可能改进它所以我不仅可以保存datagridview值,还可以保存文本框吗?(然后加载。)
谢谢
或者还有其他可用于此的东西吗?
private DataTable GetDataTableFromDGV(DataGridView dataGridView1)
{
var dt = new DataTable();
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
if (column.Visible)
{
dt.Columns.Add();
}
}
object[] cellValues = new object[dataGridView1.Columns.Count];
foreach (DataGridViewRow row in dataGridView1.Rows)
{
for (int i = 0; i < row.Cells.Count; i++)
{
cellValues[i] = row.Cells[i].Value;
}
dt.Rows.Add(cellValues);
}
return dt;
}
private void SaveXML(object sender, EventArgs e)
{
//Savefile dialog for save CSV file
SaveFileDialog savefile = new SaveFileDialog();
savefile.FileName = tbOrderNr.Text + " - " + tbCustommer.Text + ".xml";
savefile.Filter = "xml files (*.xml)|*.xml";
if (savefile.ShowDialog() == DialogResult.OK)
{
DataTable dT = GetDataTableFromDGV(dataGridView1);
DataSet dS = new DataSet();
dS.Tables.Add(dT);
dS.WriteXml(File.OpenWrite(savefile.FileName));
}
}
}
答案 0 :(得分:0)
最后我通过dataset.WriteXml
使用保存文本框和datagridview//XML save throught dataset
private void XMLsave(object sender, EventArgs e)
{
dataGridView1.AllowUserToAddRows = false;
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.TableName = "OrderData";
dt.Columns.Add("OrderNr");
dt.Columns.Add("Custommer");
dt.Columns.Add("Material");
dt.Columns.Add("MaterialCode");
ds.Tables.Add(dt);
DataTable dt1 = new DataTable();
dt1.TableName = "Data";
dt1.Columns.Add("Lenght");
dt1.Columns.Add("Width");
dt1.Columns.Add("Qty");
ds.Tables.Add(dt1);
DataRow row = ds.Tables["OrderData"].NewRow();
row["OrderNr"] = tbOrderNr.Text;
row["Custommer"] = tbCustommer.Text;
row["Material"] = tbMaterial.Text;
row["MaterialCode"] = tbForm2MatCode.Text;
ds.Tables["Data"].Rows.Add(row);
foreach (DataGridViewRow r in dataGridView1.Rows)
{
DataRow row1 = ds.Tables["Data"].NewRow();
row1["Lenght"] = r.Cells[0].Value;
row1["Width"] = r.Cells[1].Value;
row1["Qty"] = r.Cells[2].Value;
ds.Tables["Data"].Rows.Add(row1);
}
ds.WriteXml("test.xml");
dataGridView1.AllowUserToAddRows = true;
}
然后加载:
private void XmlLoad(object sender, EventArgs e)
{
DataSet ds = new DataSet();
ds.ReadXml("test.xml");
tbOrderNr.Text = ds.Tables["OrderData"].Rows[0][0].ToString();
tbCustommer.Text = ds.Tables["OrderData"].Rows[0][1].ToString();
tbMaterial.Text = ds.Tables["OrderData"].Rows[0][2].ToString();
tbForm2MatCode.Text = ds.Tables["OrderData"].Rows[0][3].ToString();
foreach (DataRow item in ds.Tables["Data"].Rows)
{
dataGridView1.AllowUserToAddRows = false;
int n = dataGridView1.Rows.Add();
dataGridView1.Rows[n].Cells[0].Value = tem["Lenght"].ToString();
dataGridView1.Rows[n].Cells[1].Value = item["Width"].ToString();
dataGridView1.Rows[n].Cells[2].Value = item["Qty"].ToString();
dataGridView1.AllowUserToAddRows = true;
}