7
votes

Obtenir des lignes vierges après avoir défini DataGridView.dataSource

Quelqu'un pourrait-il me dire pourquoi je reçois des lignes vides après avoir exécuté ce code? XXX PRE>

a également essayé P>

dataGridView.Update();


0 commentaires

12 Réponses :


4
votes

De plus, si vous utilisez AUTOGENERATECOLUMNS = FALSE, assurez-vous d'avoir ajouté des colonnes liées ou obtiendrez une ligne vierge pour chaque enregistrement


1 commentaires

Avez-vous un court exemple de comment ajouter des colonnes liées?



9
votes

Essayez quelque chose sur ces lignes:

grid.AutoGenerateColumns = false;

DataGridViewColumn colID = new DataGridViewTextBoxColumn();
colID.DataPropertyName = "customerID";
colID.HeaderText = "Ident.";
grid.Columns.Add(colID);

DataGridViewColumn colName = new DataGridViewTextBoxColumn();
colName.DataPropertyName = "customerFirstName";
colName.HeaderText = "First name";
grid.Columns.Add(colName);    
grid.DataSource = dataSet.Tables[0].DefaultView;


7 commentaires

Mon code fait la même chose comme la vôtre. Seulement que j'ai défini des colonnes DataGridView dans le concepteur et correspondent aux noms de colonne Mes Tables.


Ensuite, si vous liez la grille à l'aide du concepteur et que vous obtenez des colonnes supplémentaires à partir de SQL, votre seule préoccupation, vous pouvez simplement rendre les colonnes indésirables invisibles à l'aide du concepteur.


Je pourrais les faire invisible mais les textes d'en-tête de colonnes supplémentaires sont différents des autres colonnes fabriquées avec designer. P.s.: Ceci est pour une application mulitlangue.


Je ne suis pas sûr que je me procure bien ... Autant que je sache, vous avez un ensemble de colonnes, dont certaines sont invisibles tandis que l'autre est visible. Pour les colonnes invisibles, le texte de l'en-tête n'a pas d'importance. Pour les colonnes visibles, vous pouvez définir le texte d'en-tête affiché par programme, basé sur la langue actuelle. Ne pas voir où le problème n'est que de nouveau, il me manque peut-être quelque chose. Peut-être qu'un échantillon de code plus étendu pourrait aider.


Sorin ci-dessus, vous pouvez voir une description étendue de mon problème.


Je crois que votre code fonctionnerait, mais je dois laisser les colonnes prédéfinies dans le concepteur car mon support multilingue est basé sur des définitions de formulaire et lit automatiquement / écrit des objets et des propriétés ...


OK je vois. Ensuite, allez dans l'autre sens: définissez la source de données de la grille au moment de la conception (cela doit ajouter automatiquement les colonnes à la grille) et utiliser le concepteur pour personnaliser chaque colonne (visibilité, texte d'en-tête, etc.). Le seul code aurait toujours à écrire serait de remplir le jeu de données.



1
votes

OK Un échantillon plus étendu:

J'ai fait dans le concepteur certaines colonnes: p>

Noms de colonne: CustomerID et CustomerFirstName CODE> P>

Etablissement de la colonne: Ident. et prénom code> p>

alors je reçois des données de la table SQL ... p>

 DataTable dTable = dataGridView.GetTable().Tables[0];

 foreach (DataRow dataRow in dataGridView.GetTable().Tables[0].Rows)
 {
    int n = dataGridView.Rows.Add();
    foreach (DataColumn dataColumn in dTable.Columns)
    {
       dataGridView.Rows[n].Cells[dataColumn.ColumnName].Value = dataRow[dataColumn.ColumnName].ToString();
    }
 }


1 commentaires

Avez-vous rempli votre jeu de données? DataDacher = New SqldataDapter (); DataDacher = CreateInventoryAdapter (); Dataaapter.tablemappings.add ("table", "garage"); DataDapter.fill (myDataset); mydataview = mydataseet.tables [0] .DefaultView; datagridview1.dataSource = myDataView



3
votes

Qu'est-ce qui est contenu dans votre jeu de données?

Peut-être que le jeu de données contenu dans votre ensemble de données n'a pas de lignes. Je quitterais AUTOGENERATECOLUMUMUMUMUM TRUE ET MACHERALEMENT manuellement quelles colonnes vous ne voulez pas voir. Je n'ai jamais utilisé AUTOGENERATECOLUMNS = FAUX. Cependant, sans plus de code, il sera difficile de diagnostiquer. Essayez d'échanger ces deux déclarations (.Datasource en premier). p>

AutogenerateColumns peut avoir d'effet sur la source de liaison correspondante (DataTable de jeu de données). p>

Dataset doit être rempli par DataDapter: P>

// Example
DataAdapter = new SqlDataAdapter();
DataAdapter = CreateInventoryAdapter();
DataAdapter.TableMappings.Add("Table", "GARAGE");

DataAdapter.Fill(myDataSet);
myDataView = myDataSet.Tables[0].DefaultView;
dataGridView1.DataSource = myDataView


1 commentaires

Merci pour votre aide, mais je ne veux plus me passer de plus de temps à cela. Mon code étendu fonctionne également bien, alors ne voulez plus le changer. Meilleures salutations



19
votes

J'ai trouvé le problème.

J'ai conçu des colonnes dans le concepteur VS DataGridView. Pas le nom de la colonne, mais la colonne DataPropertyName doit correspondre à des champs dans la base de données.

Ensuite, les colonnes dupliquées se cacheront.


0 commentaires

5
votes

Je sais que cela fait longtemps que vous avez posté cela, mais je viens d'avoir le même problème et j'ai compris la réponse, alors je pensais que je le posterais afin que d'autres puissent en bénéficier.

La raison pour laquelle vos colonnes ont été vides sont parce que vous devez également définir le DataPropertyName de chacune des colonnes du concepteur pour correspondre à vos noms de champ de la base de données. Il suffit de définir le nom de conception ne suffit pas.

espoir que cela aide quelqu'un.


0 commentaires

1
votes

me.dgvlist.Autogeneratecolumns = FALSE

    Dim col = New DataGridViewTextBoxColumn()
    col.DataPropertyName = "VisitNo"
    col.HeaderText = "Sr. No."
    dgvList.Columns.Add(col)


0 commentaires

-1
votes

Essayez d'ajouter ce code avant de charger la grille

dataGridView.ColumnCount = 0;


0 commentaires

0
votes

J'ai donc eu une implémentation personnalisée où je donne aux utilisateurs la possibilité de sauvegarder les filtres de type Excel des colonnes.

J'ai chargé des résultats dans la grille, mais rien n'est apparu depuis que le filtre de type Excel sur une colonne ne pouvait rien faire correspondre.


0 commentaires

0
votes

Je sais que c'est tard, mais pour ma solution de cas ne personnifie pas les colonnes de DataGridView. Il suffit d'ajouter un DataGridView vierge et liez-le.


0 commentaires

1
votes

Si quelqu'un a toujours la question, mon problème était que j'essayais de lier aux champs publics de classe et non aux propriétés. changer de propriétés c'est-à-dire {avoir; ensemble;} corrigé-le.


0 commentaires

0
votes

Dans mon cas, aucune ligne de lignes n'a été visible car j'ai généré les données de Linq et j'ai oublié d'ajouter un appel à .toarray () à la fin. Après avoir converti les lignes de données en une matrice, elle fonctionnait.


0 commentaires