2009-11-06 4 views
2

J'ai un formulaire avec DataGridView et je souhaite charger des données d'un fichier XML dans la grille à l'aide d'un DataSet. Je crée un DataSet, charger le XML dans le DataSet, puis attribuez-lui le DataSet à la propriété DataSource de la grille:Affichage de données XML dans DataGridView à l'aide de DataSource

private void formAccountHistory_Load(object sender, EventArgs e) 
{ 
    // Load the DataSet that represents the offline version of the database. 
    AccountHistoryDS = new DataSet("TicketAccountHistory"); 

    AccountHistoryDS.ReadXmlSchema("TicketsAccountHistory.xsd"); 
    AccountHistoryDS.ReadXml("TicketsAccountHistory.xml", XmlReadMode.Auto); 
    AccountHistoryDS.Locale = System.Globalization.CultureInfo.CurrentUICulture; 

    dataGridViewStatement.AutoGenerateColumns = false; 
    dataGridViewStatement.DataSource = AccountHistoryDS; 
    dataGridViewStatement.DataMember = "Line"; 
} 

Cependant les données n'affiche pas dans la grille. J'ai 8 lignes dans le fichier XML et la grille crée 8 lignes bien, mais ils sont tous vides. Quand je débogue le code je peux voir les données dans le DataSet ainsi il semble le charger correctement à ce point, juste ne l'affichant pas dans la Grille. Le fichier XML que j'utilise est ci-dessous - il est bien formé et valide contre son schéma:

<?xml version="1.0" standalone="yes"?> 
<TicketsAccountHistory> 
    <Line> 
     <colID>03/09</colID> 
     <colStartEnd>14/01/2009-20/01/2009</colStartEnd> 
     <colDate>14/01/2009</colDate> 
     <colType>Period 03/09 - opening balance</colType> 
     <colDR></colDR> 
     <colCR></colCR> 
     <colBalance>0.00</colBalance> 
    </Line> 
    <Line> 
     <colID>03/09</colID> 
     <colStartEnd>14/01/2009-20/01/2009</colStartEnd> 
     <colDate>20/01/2009</colDate> 
     <colType>Sales Invoice (Ref: MRO-S-03/09)</colType> 
     <colDR>1000</colDR> 
     <colCR></colCR> 
     <colBalance>1000.00</colBalance> 
    </Line> 
    <Line> 
     <colID>03/09</colID> 
     <colStartEnd>14/01/2009-20/01/2009</colStartEnd> 
     <colDate>20/01/2009</colDate> 
     <colType>Commission Invoice (Ref: MRO-C-03/09)</colType> 
     <colDR></colDR> 
     <colCR>100.00</colCR> 
     <colBalance>900.00</colBalance> 
    </Line> 
    <!-- 5 more rows similar to this --> 
</TicketsAccountHistory> 

Quelqu'un peut-il me dire ce que je pourrais faire mal? Je suis nouveau à .NET 3.5 et le DataGridView et je ne sais pas comment les événements sont déclenchés quand une grille est remplie, s'il devrait y avoir du code dans n'importe lequel de ces événements, etc. Toute aide appréciée.

Cheers, Ciaran.

Répondre

5

Vous avez la déclaration:

dataGridViewStatement.AutoGenerateColumns = false; 

Cela signifie que le DataGridView aura pas toutes les colonnes. Vous pouvez le définir sur true ou insérer du code pour ajouter les colonnes.

+0

Salut Chris - Je l'ai déjà ajouté les colonnes au moment de la conception et ils apparaissent au moment de l'exécution, juste qu'ils sont vides. Est-il préférable d'ajouter des colonnes au moment de la suppression? J'ai même nommé les colonnes pour faire correspondre les éléments dans le fichier XML (pas sûr si cela est nécessaire?) –

+0

Ok, j'ai commenté la ligne dataGridViewStatement.AutoGenerateColumns = false; et la grille montre maintenant 8 lignes avec 7 colonnes vides puis 7 colonnes avec les données du XML, donc je suppose que cela fonctionne à moitié maintenant. Est-ce que cela signifie que je ne devrais pas définir les colonnes au moment du design? Existe-t-il un moyen d'obtenir les données affichées dans les colonnes définies au moment du design? –

+0

Eh bien dans mon cas, j'ajoute les colonnes à l'exécution par réflexion, mais j'ai une grille de données qui peut afficher différentes informations en fonction de la DLL chargée. – ChrisF

1

Après avoir généré manuellement les colonnes et les ont le même nom que vos champs XML, essayez ceci:

For Each col As DataGridViewColumn In dataGridViewStatement.Columns 
     col.DataPropertyName = col.Name 
    Next 
Questions connexes