DataGridViewとOK/Cancelボタンを使用した設定ダイアログがあります。ダイアログが開かれると、存在していてもいなくてもよいXMLファイルが提供され、内容が表示されます。ファイルが存在するかどうかにかかわらず、ユーザーはDataGridView内の各セルのデータを変更し、行の追加または削除ができる必要があります。 [OK]ボタンをクリックすると、DataGridViewの内容を最初に提供されたXMLファイルにエクスポートする必要があります。XMLを編集可能なDataGridViewにバインドしてロードと保存を可能にする
私はこれを数時間にわたって欺いています。これらの要件をすべて一度に処理することはできません。
私が使用したクラスには、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;
}
}