2010-11-17 14 views
1

指定的初始狀態。當我試圖改變我的DataGridView的數據源,我失去我在設計時指定的列及其類型(複選框,組合框)的順序。的DataGridView失去在設計時

這就像改變數據源再次生成datagridview的,爲什麼呢?以及如何在不丟失這些信息的情況下更改數據源?

請,如果你知道給我幫助

在此先感謝

在窗體加載我做這樣的事情

Private Sub frmGrid_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
Dim Path as string 
Path="C:\......Myfile.xml" 

Dim oData as dataset 
oData = New DataSet 
oData.ReadXml(Path) 
oData.AcceptChanges() 

DataGridView1.DataSource = oData 
DataGridView1.DataMember = oData.Tables(0).TableName 
end sub 

到目前爲止一切都很好的設計模式將被保留。

然後我在我的界面我有一個按鈕,我網的內容保存到一個Excel文件(這是一個XML,格式化的Excel文件)

然後我想導入此,上的一個按鈕的動作,所以我做了以下

Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click   
Dim MyDs As DataSet 
MyDs = New DataSet 
Dim InputFileStream As New System.IO.FileStream(Path, System.IO.FileMode.Open) 
MyDs = ImportExcelXML(InputFileStream, True, True) 
MyDs.ReadXml(Path) 
MyDs.AcceptChanges() 
DataGridView1.DataSource = MyDs 
DataGridView1.DataMember = MyDs.Tables(0).TableName  
end sub 
+0

當你在Excel中打開導出的XML文件,是在正確的順序列還是他們在GridView改變順序? – Zachary 2010-11-17 17:15:25

+0

AutoGenerateColumns http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.autogeneratecolumns.aspx – 2010-11-18 11:13:26

回答

0

我發現了一個解決方案,您的提示幫助我尋找正確的方向來尋找解決方案!

我在做什麼是對的形式負載

MaGrille.DataSource = oData 
MaGrille.DataMember = oData.Tables(0).TableName 

然後在按鈕點擊我做的:

MaGrille.DataSource = MyDs 
MaGrille.DataMember = MyDs.Tables(0).TableName 

的問題是,電網改造,我失去的格式,列順序

經過多次測試,我明白它不工作,因爲datatables的名稱是differents!我不明白爲什麼,但它看起來是錯誤的。 我有以下值 oData.Tables(0)= 「宣言」 MyDs.Tables(0)= 「工作表Sheet1」

所以我發現,如果我(0)通過 「宣言」,而不是重命名MyDs.Tables 「工作表Sheet1」,我按一下按鈕,這個時候我不鬆格式,無論是訂單...

這啓發我找到SOLUTION

多次嘗試後,我意識到如果不是在表格上加載

MaGrille.DataSource = oData 
MaGrille.DataMember = oData.Tables(0).TableName 

和按鈕點擊:

MaGrille.DataSource = MyDs 
MaGrille.DataMember = MyDs.Tables(0).TableName 

我做的:在形式,載荷

MaGrille.DataSource = oData.Tables(0) 

和按鈕點擊

MaGrille.DataSource = MyDs.Tables(0) 

所有即使OData的正常工作.Tables(0).TableName與My不同Ds.Tables(0).TableName !!

我找到了解決方案現在,但仍然不明白爲什麼如果有人得到解釋,請讓我知道。

感謝所有再次

0

Probabily你已經設定了這意味着在GridView會產生反對票數據SORCE列(名稱和它們的數量)GenerateColums屬性設置爲「真」

如果數據源(在你的情況下數據表)是不同的,將拿出一個不同的網格。

如果數據源是不同的,你可以設計你的GridView的佈局,但在那之後,你必須將數據傳輸到列,你wish.You可以做到這一點手動綁定到

RowDataBound事件。

+0

我找不到此屬性!唯一生成屬性,我看到被稱爲生成成員,是的,這是真的嗎?你確定房產的名字? – JustGreat 2010-11-18 10:02:01

0

您要分配給DataGridView1.DataSource數據表的結構由你定​​義在設計時的DataGridView的方式不同。在將新的DataTable重新分配給DataSource並查看結構中的不同之處之前,在代碼中放置一個斷點。這很可能是您的DataColumns或多或少,或者列的順序可能不同。他們甚至可能被命名爲不同。如果在設計時設置你的DataGridViewColumn的DataProperty到一個特定的名稱,然後比名稱需要非常精確。

你只需要在那個斷點檢查它,看看有什麼不同。