我有一个带有DataGridView的设置对话框和一个OK / Cancel按钮。打开对话框时,会提供一个可能存在或不存在的XML文件,并显示内容。无论文件是否存在,用户都必须能够修改DataGridView中每个单元格中的数据,同时还能够添加或删除行。单击“确定”按钮时,必须将DataGridView的内容导出到最初提供的XML文件中。
我现在已经搞错了好几个小时了,我似乎无法立刻解决所有这些要求。
我使用的一些类包括XmlDataDocument,List,DataSet,DataTable和BindingSource。
这是我当前的实现(失败)。需要注意的一点:我手动将所有列设置为ReadOnly = false。我可以添加新列,但我无法弄清楚如何允许删除列。
public partial class DefineAuctionRulesetDialog : Form
{
private string _rulesetFile;
private DataSet _dataSet;
public DefineAuctionRulesetDialog(string rulesetFile)
{
this.Text = "Define Auction Ruleset: " + rulesetFile;
_rulesetFile = "auctions\\" + rulesetFile + ".xml";
InitializeComponent();
_dataSet = new DataSet("AuctionRuleset");
LoadRulesFromFile();
}
private void LoadRulesFromFile()
{
List<AuctionRules> rules = new List<AuctionRules>();
if (System.IO.File.Exists(_rulesetFile))
{
_dataSet.ReadXml(_rulesetFile);
}
dgvRules.DataSource = _dataSet;
//dgvRules.DataMember = "AuctionRule"; can't do this unless the file exists (the dataset needs data)
}
private void SaveRulesToFile()
{
if (dgvRules.DataSource != null)
{
_dataSet = (DataSet)(dgvRules.DataSource); //setting it to itself?
_dataSet.WriteXml(_rulesetFile);
}
}
private void btnOK_Click(object sender, EventArgs e)
{
SaveRulesToFile();
DialogResult = DialogResult.OK;
}
private void btnCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
}
}
答案 0 :(得分:1)
我将如何做到这一点:
或者,DataTable可能支持WriteXml / ReadXml调用,但这会强制xml文件位于MS DataTable架构中。该帖子没有提到xml的架构。
此外,请确保在DGV上选中启用添加,编辑和删除。