2009-07-27 51 views
0

我有一個DataGridView的設置對話框和一個確定/取消按鈕。當對話框打開時,會提供一個可能存在也可能不存在的XML文件,並顯示其內容。無論文件是否存在,用戶都必須能夠修改DataGridView中每個單元格中的數據,以及能夠添加或刪除行。單擊確定按鈕後,必須將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; 
    } 
} 

回答

1

這是我會怎麼做:

  1. 創建類範圍的DataTable。
  2. 在窗體構造函數中添加特定的列。將DataGridView.DataSource設置爲等於此DataTable。
  3. 爲打開的對話框添加一個事件處理程序。
  4. 使用Xdocument,XmlDocument或XmlReader從給定的xml文件中讀取數據。調用DataTable.NewRow()並設置字段。將此DataRow傳遞給DataTable.Rows.AddRow
  5. 爲保存對話框添加事件處理程序。
  6. 迭代DataTable的行並使用XDocument將它們寫入xml文件(請參閱linq to xml文檔)。

或者,DataTable確實支持WriteXml/ReadXml調用,但強制xml文件位於MS DataTable模式中。這篇文章沒有提到xml的模式。

此外,請確保在DGV上選中啓用添加,編輯和刪除。

相關問題