2010-11-17 5 views
1

Lorsque j'essaie de modifier la source de données de mon DataGridView, je perds l'ordre des colonnes et leur type (cases à cocher, comboboxes) que j'ai spécifié au moment du design.DataGridView perdre l'état initial spécifié au moment du design

C'est comme si le fait de changer la source de données générait de nouveau le datagridview, pourquoi? et Comment puis-je changer la source de données sans perdre ces informations?

S'il vous plaît si vous me connaissez donner de l'aide

Merci à l'avance

Sur la forme charge je fais quelque chose comme

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 

Jusqu'à présent, tout va bien le mode de conception est préservée.

Puis-je avoir dans mon interface, j'ai un bouton pour enregistrer le contenu de mon grille dans un fichier Excel (c'est un xml, formaté pour Excel)

Ensuite, je veux importer ce, sur une action de bouton, donc je fais ce qui suit

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

Lorsque vous ouvrez le fichier XML exporté dans Excel, sont les colonnes dans le bon ordre ou ont-ils changé l'ordre du GridView? – Zachary

+0

AutoGenerateColumns http://msdn.microsoft.com/fr-fr/library/system.web.ui.webcontrols.gridview.autogeneratecolumns.aspx –

Répondre

0

J'ai trouvé une solution, vos astuces m'ont aidé à chercher dans la bonne direction pour trouver une solution!

Ce que je faisais était en pleine forme charge

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

ensuite sur le bouton cliquez sur Je:

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

Le problème est que la grille est de reconstruire et je lâche la mise en forme, l'ordre des colonnes

Après de nombreux tests, j'ai compris que ça ne fonctionnait pas car les noms des datatables sont différents!Je ne comprends pas pourquoi, mais c'était l'erreur comme il semble. J'ai eu les valeurs suivantes oData.Tables (0) = "DECLARATION" MyDs.Tables (0) = "Sheet1"

Je remarqué que si je renomme MyDs.Tables (0) par "DECLARATION" au lieu de « Sheet1 », et je clique sur le bouton, cette fois, je ne suis pas lâche formatage, ni commandes ...

cela m'a inspiré pour trouver la SOLUTION:

Après de nombreux essais, je me suis rendu que si au lieu de faire sur le formulaire charge

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

et sur le bouton clic:

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

je:

sur la forme de charge

MaGrille.DataSource = oData.Tables(0) 

et cliquez sur le bouton

MaGrille.DataSource = MyDs.Tables(0) 

Tout fonctionne bien, même si le oData .Tables (0) .TableName est différent de My Ds.Tables (0) .TableName !!

J'ai trouvé la solution Maintenant, mais je ne comprends toujours pas le POURQUOI Si quelqu'un obtient une explication, s'il vous plaît faites le moi savoir.

Merci à tous encore une fois

0

probabily vous avez configuré propriété GenerateColums « True »

Cela signifie que GridView va générer les colonnes (nom et nombre d'entre eux) againts la Sorce de données.

Si la source de données (dans votre tableau de données de cas) est différente, une grille différente apparaîtra.

Si la source de données sont différentes, vous pouvez concevoir la mise en page de votre GRIDVIEW mais après que vous devez lier manuellement les données aux colonnes que vous wish.You peut le faire dans

événement RowDataBound.

+0

Je ne trouve pas cette propriété! la seule propriété génératrice que je vois s'appelle générer des membres et oui c'est vrai? Êtes-vous sûr du nom de la propriété? – JustGreat

0

La donnée que vous essayez d'affecter à DataGridView1.DataSource est structurée différemment de la façon dont vous avez défini DataGridView au moment du design. Placez un point d'arrêt dans votre code juste avant de réaffecter le nouveau DataTable à DataSource et voyez ce qui est différent dans la structure. Il est fort probable que vous ayez plus ou moins de DataColumns en place, ou que les colonnes puissent être dans un ordre différent. Ils pourraient même être nommé différent. Si, au moment de la conception, vous définissez DataProperty de DataGridViewColumn sur un nom spécifique, alors le nom doit être exact.

Vous aurez juste à le vérifier à ce point d'arrêt et voir quelles sont les différences.

Questions connexes