Maciej Los
Пожалуйста, сначала прочтите мой комментарий к этому вопросу.
Есть несколько проблем с вашим кодом. Что ж...
Настоящий кодекс:
DataGridView1.Rows.Add(sr.ReadLine.Split(CChar(vbTab)))
добавляет строки в компонент datagridview.
А вот этот:
DataGridView1.DataSource = dt
удаляет предыдущие данные и связывает их с datatable.
Вы должны решить, какой метод вы хотите использовать для отображения данных: а) несвязанный или б) связанный DataGridView.
Объявления)
Вы добавляете данные вручную, строка за строкой. Вы делаете это в
Button1_Click
событие.
Для получения более подробной информации, пожалуйста, смотрите:
Пошаговое руководство: создание несвязанного элемента управления Windows Forms DataGridView | Microsoft Docs[
^]
Объявление b)
Вы создаете источник данных и связываете его с компонентом DataGridView. Вы делаете это в
Button2_Click
событие.
Больше:
Как привязать данные к элементу управления Windows Forms DataGridView | Microsoft Docs[
^]
Как выполнить автогенерацию столбцов в элементе управления DataGridView Windows Forms с привязкой к данным | Microsoft Docs[
^]
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Using ouvrir As New OpenFileDialog
If ouvrir.ShowDialog = DialogResult.OK Then BindData(ouvrir.FileName)
End Using
End Sub
Не LINQ для решения:
Private Sub BindData(sFileName As String)
'create a datatable object to bind data to DataGridView component
Dim dt As DataTable = New DataTable()
'add columns
dt.Columns.AddRange(New DataColumn() _
{
New DataColumn("Command", Type.GetType("System.String")), _
New DataColumn("Article", Type.GetType("System.String")), _
New DataColumn("Qte", Type.GetType("System.String")), _
New DataColumn("PU", Type.GetType("System.String")), _
New DataColumn("Designation", Type.GetType("System.String")) _
})
'add data from file
Using sr As New StreamReader(sFileName)
While Not sr.EndOfStream
dt.Rows.Add(sr.ReadLine.Split(New String(){vbTab}, StringSplitOptions.RemoveEmptyEntries))
End While
End Using
'bind data
With DataGridView1
.AutoGenerateColumns = True
.DataSource = dt
End With
End Sub
Решение Linq:
Private Sub BindData(sFileName As String)
Dim lines As String() = File.ReadAllLines(sFileName)
'create a datatable object to bind data to DataGridView component
Dim dt As DataTable = New DataTable()
'add columns
dt.Columns.AddRange(New DataColumn() _
{
New DataColumn("Command", Type.GetType("System.String")), _
New DataColumn("Article", Type.GetType("System.String")), _
New DataColumn("Qte", Type.GetType("System.String")), _
New DataColumn("PU", Type.GetType("System.String")), _
New DataColumn("Designation", Type.GetType("System.String")) _
})
'add data from file
dt = lines _
.Select(Function(x) dt.LoadDataRow(x.Split(New String(){vbTab}, StringSplitOptions.RemoveEmptyEntries), False)) _
.CopyToDataTable()
'bind data
With DataGridView1
.AutoGenerateColumns = True
.DataSource = dt
End With
End Sub
Примечание №1: я понятия не имею, как данные из Sql Server связаны с данными из текстового файла, поэтому - вы должны использовать свою логику для заполнения
Designation
колонка.
Примечание № 2: приведенный выше код не является оптимальным, но он должен предоставить вам способ достижения вашей цели.
Примечание №3: я бы настоятельно рекомендовал использовать
Использование Оператора (Visual Basic) | Microsoft Docs[
^Пожалуйста, прочтите соответствующую статью, чтобы узнать, почему...
Удачи вам!