2012-05-23 63 views
0

我剛開始學習C#,我對DataSet/DataTable/DataGridView有點困惑。 現在我有一個簡單的表格,其中有DataGridView,listBox,按鈕。當我的表單加載到列表框中時,我正在獲取Excel表單的列表。然後我選擇其中一張,然後出現在DataGridView(我正在寫給DataSetDataTable的所有信息)。我想在運行時添加或刪除列。這裏是我的Delete按鈕的代碼:我可以在運行時將更改的信息保存在datagridview中嗎?

excelConn = new OleDbConnection(); 
    excelConn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + excelFilePath + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; 
    DataTable dt = new DataTable(); 
    OleDbDataAdapter ExcelAdapt = new OleDbDataAdapter("Select * From " + "[" + tableName + "]", excelConn); 
    ExcelAdapt.Fill(dt); 
    try 
    { 
     dt.Columns.Remove(colName); 
     dt.AcceptChanges(); 
     var bds = new BindingSource(); 
     bds.DataSource = dt; 
     grid.DataSource = bds; 

     MessageBox.Show("Column(s) deleted "); 
     excelConn.Close(); 
     } 

     catch (Exception ex) 
     { 
     MessageBox.Show(ex.Message); 
     } 

我現在面臨的問題是,我無法保存在運行時,甚至在運行時,這些改變是暫時的改變。如果在運行時添加新列,然後我從ListBox中選擇另一個表,這些更改將消失。

found this tutorial但如果我理解得好,它會改變數據庫;以及在我的情況下,它會改變Excel文件(但我想有原始的Excel文件,並只在DataSetDataTable進行更改)。

我可以只在DataSet/DataTable進行更改。如果是,那麼如何?

+0

看看這個答案:http://stackoverflow.com/questions/57987/writing-into-excel-file-with-oledb – udog

+0

沒有時間發佈答案,但通常的方式來保存數據表是序列化它到XML。這意味着你在代表數據表的磁盤上創建一個xml文件。 http://stackoverflow.com/questions/2458847/how-to-serialize-a-datatable-to-json-or-xml –

回答

0

這裏是你的問題的具體解決方案,它會更新從DataGridView到Excel中的數據,我只是測試我的機器上,並沒有工作:

http://blogs.msdn.com/b/spike/archive/2008/10/29/how-to-update-an-excel-worksheet-using-dataset-and-the-oledbdataadapter.aspx

[編輯]

例如,下面的代碼將從DataGridView1和本地副本中刪除第3行,但是您的EXCEL不會受到影響。

dataGridView1.Rows.RemoveAt(2); 
ds.Tables["[Sheet1$]"].Rows[2].Delete(); 

後來,當你要保存此數據到其他EXCEL,你可以導出到新的Excel或相同的EXCEL不同[SheetX。

+0

那麼,我知道插入命令的方法,但它也改變了Excel文檔。我只想在DataSet/DataTable中保留更改。或者我問不可能?對不起,對於我不完美的英語,以及難以理解我的要求。 – intentarr

+0

我以爲你剛纔問的對面,你的帖子不是很清楚。如果是這種情況,您根本不需要使用DataSet.update或DataTable.update。當您對DataGridView進行更改時,可以手動從DGV中選擇行/列進行修改/刪除,這將更新DS/DT的本地副本,但是EXCEL不會受到影響。有關代碼示例,請參見上面的[編輯]部分。 – AvkashChauhan

+0

非常感謝您的幫助。這就是我需要的:) – intentarr

相關問題