Jeśli widzieliście mój dział prognozowanie na pewno zwróciliście uwagę, że w swoich programach dałem możliwość szybkiego przenoszenia danych z excela. Jest to dosyć prosta metoda. Zaczynamy od dodania DataGridView do naszego projektu, od razu zmieniamy wartość we właściwościach DataGridView „AllowDrop” na „True”:
Teraz w zdarzeniach dla DatagridView znajdujemy dwa zdarzenia: „DragDrop”, „DragEnter”
Tworzymy dla nich uchwyt poprzez dwukrotne kliknięcie na puste pole obok nich. DragEnter wypełniamy kodem:
Private Sub DataGridView1_DragEnter(sender As Object, e As DragEventArgs) Handles DataGridView1.DragEnter
Dim DostepnyFormat As String() = e.Data.GetFormats()
'Sprawdź czy żądany format jest zawarty w obiekcie przeciągania
If (e.Data.GetDataPresent("Text")) Then
'Jeśli tak to skpiuje elementy
e.Effect = DragDropEffects.Copy
Else
'Jeśli nie operacja zostanie zatrzymana
e.Effect = DragDropEffects.None
End If
End Sub
Silnikiem całej naszej konstrukcji będzie DragDrop. Wystarczy wypełnić go kodem, starałem się zamieścić tłumaczenie w kodzie:
Private Sub DataGridView1_DragDrop(sender As Object, e As DragEventArgs) Handles DataGridView1.DragDrop
Dim tekst As String = e.Data.GetData("Text").ToString()
'Tworzy tablice elementów pobranych z excela
Dim parts As String() = tekst.Split(New String() {Environment.NewLine}, StringSplitOptions.None)
'Tworzy kolumny dla naszych danych
'Jeśli kolumny nie istnieją:
If DataGridView1.ColumnCount = 0 Then
DataGridView1.ColumnCount = 1
Dim nazwaKolumny As String
nazwaKolumny = InputBox("Wpisz nazwę nowej kolumny", "Nazwa kolumny", "")
DataGridView1.Columns(0).Name = nazwaKolumny
Else
'Jeśli kolumny istnieją, doda nową i zapyta się o jej nazwę
DataGridView1.ColumnCount = DataGridView1.ColumnCount + 1
Dim nazwaKolumny As String
nazwaKolumny = InputBox("Wpisz nazwę nowej kolumny", "Nazwa kolumny", "")
DataGridView1.Columns(DataGridView1.ColumnCount - 1).Name = nazwaKolumny
End If
'Teraz musimy rozważyć kilka sytuacji
' 1. wierszy jest tyle co danych (wtedy poprostu wpiszemy dane w komórki)
If DataGridView1.RowCount = parts.Count Then
For i As Integer = 0 To parts.Length - 1
DataGridView1.Rows(i).Cells(DataGridView1.ColumnCount - 1).Value = parts(i)
Next
'2 wierszy jest mniej niż danych (wtedy trzeba dodać brakujące wiersze
' i wpisać w nie dane
ElseIf DataGridView1.RowCount < parts.Count Then
For i As Integer = 0 To parts.Length - 2 - DataGridView1.RowCount + 1
DataGridView1.Rows.Add()
Next
For i As Integer = 0 To parts.Length - 1
DataGridView1.Rows(i).Cells(DataGridView1.ColumnCount - 1).Value = parts(i)
Next
'3. Wierszy jest więcej niż danych (po prostu wpiszemy dane od początku)
ElseIf DataGridView1.RowCount > parts.Count Then
For i As Integer = 0 To parts.Length - 1
DataGridView1.Rows(i).Cells(DataGridView1.ColumnCount - 1).Value = parts(i)
Next
End If
End Sub
To by było na tyle 🙂 projekt do pobrania: Przenoszenie_elementow_z_excela

