DataGridViewと[OK/キャンセル]ボタンのある設定ダイアログがあります。ダイアログを開くと、存在する場合と存在しない場合があるXMLファイルが提供され、内容が表示されます。ファイルが存在するかどうかに関係なく、ユーザーは、行を追加または削除できるだけでなく、DataGridViewの各セルのデータを変更できる必要があります。[OK]ボタンをクリックすると、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;
}
}