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:
1 2 3 4 5 6 7 8 9 10 11 12 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
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