2012-04-19 169 views
1

我想要做的是編寫一個在我的Windows窗體應用程序的業務邏輯中的sepprate函數。此函數接收xml文件路徑和datagridview對象作爲參數。從DataGridView提取數據並填充XML

這應該工作:

DataTable dt = new DataTable(); 
dt = (DataTable)datagridview.DataSource; 
DataSet ds = new DataSet(); 
ds.Tables.Add(dt); 
ds.WriteXml(xml_file, System.Data.XmlWriteMode.IgnoreSchema); 

但我有行了錯誤,每次:

dt = (DataTable)datagridview.DataSource; 

[System.InvalidCastException] = {"Unable to cast object of type 'System.Windows.Forms.BindingSource' to type 'System.Data.DataTable'."} 

,所以我在另一篇博客建議試試這個:

BindingSource bs = (BindingSource)dgv.DataSource; 
dt = (DataTable)bs.DataSource; 

但我得到

[System.InvalidCastException] = {"Unable to cast object of type 'ExportDataTestApp.NorthwindDataSet' to type 'System.Data.DataTable'."} 

我已經搜索並tryed一切,我不會supprised如果是簡單的東西,因爲我是新來的C#,但我需要幫助,請

+0

如果設置NorthwindDataSet網格數據源,你需要「找回」像這樣的東西結合:數據集DS'=(NorthwindDataSet )datagridview.DataSource;' – Reniuz 2012-04-19 10:15:03

回答

2

你幾乎沒有。

BindingSource bs = (BindingSource)dgv.DataSource; 
DataSet ds = (DataSet)bs.DataSource; 
DataTable dt = ds.Tables["Customers"]; // or Tables[0] 

顯然,你與DataSourse = myDataSet,數據成員=「表名」

+0

感謝百萬它完美的作品... – mayukh 2012-04-19 11:17:24

+0

@HenkHolterman請檢查此[鏈接](http://stackoverflow.com/q/12599396/1577396)有點相同的問題:(。 – 2012-09-27 06:57:52