Как я могу получить DataGridView из буфера обмена? (В конечном итоге это ноль в буфер обмена) - PullRequest
1 голос
/ 21 июля 2010

Я не могу прочитать вставленный объект datagridviewrow из буфера обмена. Все, что я хочу сделать, это, когда пользователь выделил и скопировал всю строку, я вставил бы эту строку в буфер обмена как объект DataObject. Это работает просто отлично, но когда я пытаюсь прочитать этот DataObject (после того, как пользователь нажмет Paste), DataGridViewRow, который сохраняется в буфере обмена, всегда имеет значение Nothing. Пожалуйста, помогите!

Вот код, который я использую для копирования и вставки.

Private Sub copyToClipboard()
    If DataGridView1.CurrentCell IsNot Nothing AndAlso _
        DataGridView1.CurrentCell.Value IsNot Nothing Then
        If DataGridView1.SelectedRows.Count = 1 Then
            My.Computer.Clipboard.SetData(GetType(DataGridViewRow).ToString, getActiveGrid.SelectedRows(0))
        End If
    End If
End Sub

Private Sub pasteFromClipboard()
    Dim oDataObject As IDataObject = My.Computer.Clipboard.GetDataObject
    If oDataObject.GetDataPresent(GetType(DataGridViewRow).ToString) Then
        Dim GridRow As DataGridViewRow = _
            DirectCast(oDataObject.GetData(GetType(DataGridViewRow).ToString), DataGridViewRow)
        ' here's the issue. the variable GridRow always has a value of nothing. 
    End If
End Sub

Ответы [ 2 ]

0 голосов
/ 22 июля 2010

Это то, что я использую:

    Private Sub mnuCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCopy.Click
    If dgvDisplaySet.GetClipboardContent Is Nothing Then
        MsgBox("Nothing selected to copy to clipboard.")
    Else
        Clipboard.SetDataObject(dgvDisplaySet.GetClipboardContent)
    End If
End Sub

У меня также есть свойство clipboardCopyMode представления сетки данных, для которого установлено значение EnableAlwaysIncludeHeaderText.

Я хочу скопировать любые выбранные ячейки.

НТН

0 голосов
/ 21 июля 2010

Из того, что я могу сказать, буфер обмена не может принять формат DataGridViewRow.Вот почему вы ничего не получаете обратно.

Попробуйте:

Private Sub copyToClipboard()
If DataGridView1.CurrentCell IsNot Nothing AndAlso _
    DataGridView1.CurrentCell.Value IsNot Nothing Then
    If DataGridView1.SelectedRows.Count = 1 Then
        My.Computer.Clipboard.SetDataObject(getActiveGrid.GetClipboardContent())
    End If
End If
End Sub

Private Sub pasteFromClipboard()
Dim oDataObject As IDataObject = My.Computer.Clipboard.GetDataObject
If oDataObject.GetDataPresent(DataFormats.Text) Then
   Dim strRow as String = Clipboard.GetData(DataFormats.Text)

   'Then create a datagridrow using the data       

End If
End Sub

Вы также можете проверить здесь (это C #, но концепции те же): Копирование строк /функциональность вставки в DataGridview (приложение Windows)

...