2015-02-27 2 views
0

J'ai lu et googlé mais je n'ai pas trouvé la petite chose qui m'aiderait. Je pense avoir une erreur logique simple. Ok, donc voici ce que j'ai: Un DataGridView lié à un Datatable peuplé de noms de fichiers (et d'autres informations, principalement le format audio). Eh bien, maintenant, j'ai écrit un sous (VS2013 et en utilisant. Net 4.0) pour l'impression qui fonctionne bien, j'ai essayé d'ajouter une option pour imprimer seulement les lignes sélectionnées de DataGridView et je pensais ok, alors je donne la routine d'impression lignes de DataGridView ou uniquement les lignes sélectionnées en fonction de cette option. C'est ce que j'ai essayé: Sur la forme de niveau I défini le rowCollection comme: Dim rowCollection Comme DataGridViewRowCollectionvb.net obtenir une collection de lignes à partir d'un datagridview lié basé sur la sélection

Le BeginPrint Sub a alors les lignes suivantes pour obtenir les lignes:

'*** Get Rows to print 
    rowCollection = New DataGridViewRowCollection(FileDataGridView) 
    If My.Settings.PrintSelected And (FileDataGridView.SelectedRows.Count > 0) Then 
     Dim row As New DataGridViewRow 
     For r = FileDataGridView.SelectedRows.Count - 1 To 0 Step -1 
      row = FileDataGridView.SelectedRows(r) 
      rowCollection.Add(FileDataGridView.Rows(row.Index)) 
     Next 
    Else 
     rowCollection = FileDataGridView.Rows 
    End If 

Je pensais un rowCollection serait quelque chose comme un tableau des lignes simples, mais apparemment, cela ne fonctionne pas. Si je veux imprimer toutes les lignes, cela fonctionne correctement, mais pour les lignes sélectionnées, j'obtiens une erreur que les éléments no peuvent être ajoutés à la collection de lignes car DataGridView est databound. Je pensais que rowCollection pouvait être peuplé par des lignes uniques, un lien non seulement vers l'ensemble DataGridView. Où ai-je tort? J'ai également essayé d'obtenir seulement le .SelectedRows en tant que collection, mais alors je reçois des erreurs de type comme DataGridView.Rows et DataGridView.SelectedRows n'ont pas le même format? Je voudrais obtenir une liste/collection/tableau des lignes ou des lignes sélectionnées, que je peux ensuite utiliser pour l'impression. Toute aide serait appréciée

salutations

Christian

Répondre

0

Sûrement pas une solution parfaite, mais fait le travail:

Dim rows As List(Of DataGridViewRow) 
    Dim rowarray(DataGridView1.Rows.Count) As DataGridViewRow 
    If DataGridView1.SelectedRows.Count > 0 Then 
     DataGridView1.SelectedRows.CopyTo(rowarray, 0) 
    Else 
     DataGridView1.Rows.CopyTo(rowarray, 0) 
    End If 
    rows = rowarray.ToList 
    rows.RemoveAll(Function(a As DataGridViewRow) a Is Nothing) 

Il y a une différence entre un SelectedRowCollection et un RowCollection, pour quelle que soit la raison, ils n'ont pas utilisé l'héritage pour ces 2, donc vous avez besoin de tricher un peu pour traiter les deux de la même manière

+0

thx, cela fonctionne parfaitement. –

+0

Quelqu'un connaît-il la différence entre SelectedRowCollection et RowCollection? Google donne seulement quelque chose à propos de ChildRows vs. Rows [link] (http://www.telerik.com/help/winforms/gridview-rows-rows-vs-childrows.html) SelectedRowsCollections est-il une sorte de ChildRows? Parfois, je ne comprends vraiment pas le "pourquoi" dans .NET. –