【发布时间】:2021-01-04 02:20:24
【问题描述】:
我无法弄清楚这一点,我已经尝试了好几个小时。 我正在尝试将 .xml 文件加载到我的 DataGridView 中。我已经设法将 DataGridColumn 保存到这样的 .xml 文件中:
SaveFileDialog savefile = new SaveFileDialog();
savefile.FileName = "Test.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));
}
通过运行这些代码行,.xml 文件显示如下内容:
<NewDataSet>
<Table1>
<Column1>123235435</Column1>
<Column2>dffg</Column2>
<Column3>ghh</Column3>
<Column4>N/A</Column4>
<Column5>100k</Column5>
<Column6>False</Column6>
<Column7>False</Column7>
</Table1>
<Table1 />
</NewDataSet>
这很好用(我认为),但是当我尝试通过各种方法加载它时,它要么根本不加载它,要么我突然无法再以编程方式添加行。我希望在 Forms1_Load 事件中加载文件,并且希望能够再次将其保存到同一个文件中。
如果我不清楚并需要详细说明,请告诉我。在此先感谢:)
编辑:GetDataTableFromDGV 方法:
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;
}
【问题讨论】:
-
因为您使用 DataSet 来存储数据:
var ds = new DataSet(); ds.ReadXml([Your XML File Path]); [DataGridView].DataSource = ds.Tables[0];。这是你试过的吗? -
@Jimi 抱歉回复晚了,但是是的,我尝试了类似的方法,它只添加了相应数量的行,但列中没有任何数据。我的意思是所有列都是空的,但它确实生成了 2 行。显然,我也希望填写这些列。我不知道是什么导致了这个问题。谢谢你的回答!
-
因此,数据已加载(您有两个新行)。您是否检查了一些基本内容,例如 DGV DefaultCellStyle ForeColor 是否与 BackColor 相同(因此您无法看到文本。如果您单击单元格,它将显示)? -- 你能说明
GetDataTableFromDGV(dataGridView1)在做什么吗? (当您的代码中有相关方法时,您应该发布这些方法的主体)。 -
当然,愚蠢的我不表现出来哈哈。我已将其添加到我的帖子中。此外,文本应该是可见的,因为颜色彼此不同。
-
仅供参考,既然你说了,检查文件的内容,数据是存储的,如下所示。 1. 我建议这样写数据:
[DataSet].WriteXml(savefile.FileName, XmlWriteMode.WriteSchema);:File.OpenWrite()保持 Stream 打开而不关闭它。 2. 您应该使用 DataTable 作为 DGV 的 DataSource。如果要删除列(以避免隐藏的列?为什么?),DataTable 有Remove()和RemoveAt()方法。不要像那样使用object[],你最终会得到所有的字符串。到目前为止,您还保存了NewRow对象。
标签: c# xml visual-studio winforms datagridview