C# 在Windows窗体中选择并更新数据表
XMLC# 在Windows窗体中选择并更新数据表,c#,xml,winforms,datagridview,datatable,C#,Xml,Winforms,Datagridview,Datatable,XML 1. 艺术家1 他的相册 C://music//song.mp3 2. 艺术家1 他的相册 C://music//song2.mp3 3. 艺术家1 他的相册 C://music//song2.mp3 DataSet dsStore=新数据集(); DataTable dt=新的DataTable(); 公共void loadXmlTracks() { //TrackCollection tracks=null; 字符串路径=“../../../../../../test.xml”;
1.
艺术家1
他的相册
C://music//song.mp3
2.
艺术家1
他的相册
C://music//song2.mp3
3.
艺术家1
他的相册
C://music//song2.mp3
DataSet dsStore=新数据集();
DataTable dt=新的DataTable();
公共void loadXmlTracks()
{
//TrackCollection tracks=null;
字符串路径=“../../../../../../test.xml”;
//XmlSerializer serializer=新的XmlSerializer(typeof(TrackCollection));
//StreamReader=新的StreamReader(路径);
//tracks=(TrackCollection)序列化程序。反序列化(reader);
//reader.Close();
ReadXml(路径);
dt=dsStore.Tables[“Track”];
//最后将数据绑定到网格
负荷网格(dt);
}
私有void dataGridView1_CellEndEdit(对象发送方,DataGridViewCellEventArgs e)
{
int i;
int j;
i=e.RowIndex;
j=e.柱状指数;
字符串id=dataGridView1.Rows[i]。单元格[0]。值。ToString();
字符串值=dataGridView1.Rows[i].Cells[j].value.ToString();
DataRow[]row=dt.选择(“Id=”+i,“Id”);
foreach(第行中的数据行r)
{
r[j]=值;
r、 接受变化();
}
公共无效荷载网格(数据表dt)
{
dataGridView1.DataSource=null;
dataGridView1.DataSource=dt;
}
编辑:这是我正在加载的xml文件,然后我将其插入到datatable中,然后我使用该datatable加载我的datagridview。我想完成的是,如果用户编辑datagridview中的单元格以更新我datatable中的该行,那么当我关闭应用程序时,它会保存回xml文件
我不确定也不明白的是,如何将更改保存回我的Datatable,如果我有需要更改的行的ID,那么执行循环是否正确
我尝试了RowFilter并进行了更改,但当我重新加载datagridview时,它只显示我更改的行。在您的代码中,我看到一些注释:
<?xml version="1.0" encoding="utf-8"?>
<TrackCollection>
<Tracks>
<Id>1</Id>
<Artist>Artist 1</Artist>
<Album>His album</Album>
<Filepath>C://music//song.mp3</Filepath>
<Id>2</Id>
<Artist>Artist 1</Artist>
<Album>His album</Album>
<Filepath>C://music//song2.mp3</Filepath>
<Id>3</Id>
<Artist>Artist 1</Artist>
<Album>His album</Album>
<Filepath>C://music//song2.mp3</Filepath>
</Tracks>
</TrackCollection>
DataSet dsStore = new DataSet();
DataTable dt = new DataTable();
public void loadXmlTracks()
{
//TrackCollection tracks = null;
string path = "..//..//..//test.xml";
//XmlSerializer serializer = new XmlSerializer(typeof(TrackCollection));
//StreamReader reader = new StreamReader(path);
//tracks = (TrackCollection)serializer.Deserialize(reader);
//reader.Close();
dsStore.ReadXml(path);
dt = dsStore.Tables["Track"];
// finally bind the data to the grid
LoadGrid(dt);
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
int i;
int j;
i = e.RowIndex;
j = e.ColumnIndex;
string id = dataGridView1.Rows[i].Cells[0].Value.ToString();
string value = dataGridView1.Rows[i].Cells[j].Value.ToString();
DataRow[] row = dt.Select("Id=" + i, "Id");
foreach (DataRow r in row)
{
r[j] = value;
r.AcceptChanges();
}
public void LoadGrid(DataTable dt)
{
dataGridView1.DataSource = null;
dataGridView1.DataSource = dt;
}
AcceptChanges只是我在尝试的东西,如果最终结果是我所需要的,那么代码中的任何东西都可以更改。在更改网格中的单元格值时,我想要更改datatable的原因是,每当应用程序关闭时,它都会更新打开时读取的xml。因此,我必须始终检查datatable
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
string path = "..//..//..//test.xml";
dataGridView1.EndEdit();
if(dsStore.GetChanges()!=null)
{
dsStore.WriteXml(path);
}
}