0

我已经阅读并搜索过,但没有找到对我有帮助的小东西。我想我有一些简单的逻辑错误。好的,这就是我所拥有的:绑定到填充有文件名(和其他信息,主要是音频格式)的 Datatable 的 DataGridView。好吧,现在我已经编写了一个子(VS2013 并使用 .Net 4.0)进行打印,效果很好,我尝试添加一个选项以仅打印 DataGridView 中的选定行并认为可以,然后我将打印例程提供整行DataGridView 或仅基于该选项的选定行。这是我尝试过的:在表单级别上,我将 rowCollection 定义为: Dim rowCollection As DataGridViewRowCollection

BeginPrint Sub 然后具有以下行来获取行:

'*** 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

我认为 rowCollection 类似于单行数组,但显然这不起作用。如果我想打印所有行,这可以正常工作,但是对于选定的行,我收到一个错误,因为 DataGridView 是数据绑定的,所以不能将任何元素添加到行集合中。我认为 rowCollection 可以按单行填充,不仅链接到整个 DataGridView。我哪里错了?我还尝试仅将 .SelectedRows 作为集合获取,但随后出现类型错误,因为 DataGridView.Rows 和 DataGridView.SelectedRows 的格式不同?我想获得行或选定行的列表/集合/数组,然后我可以将其用于打印。任何帮助,将不胜感激

问候,

基督教

4

1 回答 1

0

当然不是一个完美的解决方案,但可以完成工作:

    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)

SelectedRowCollection 和 RowCollection 之间是有区别的,无论出于何种原因,他们没有为这两个使用继承,所以你需要作弊才能以相同的方式处理两者

于 2015-02-27T09:44:20.830 回答