我有一个带有 DataGridView 的设置对话框和一个确定/取消按钮。打开对话框时,会提供一个可能存在也可能不存在的 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;
}
}