#vb.net #datagridview
#vb.net #datagridview
Вопрос:
Я создаю подпрограмму, которая будет создавать datagridviews в зависимости от желаемого количества циклов. Я предполагаю, что проблема заключается в том, что столбцы, которые должны быть созданы для каждого datagridview, все объединены в первом созданном datagridview. Причина, по которой я предполагаю это, заключается в том, что я вижу другие datagridview без столбцов и строк (только серый фон). Я предполагаю, что мои объявления переменных столбца не подходят для того, что я хочу сделать. Пожалуйста, посмотрите мой код.
Подпрограмма для создания кода Datagridview:
Private Sub DrawGridViewWLoop()
Dim dgvIterator As Short
ReDim dgvControlArr(10)
For dvgIterator = 0 To 3
dgvControlArr(dvgIterator) = New System.Windows.Forms.DataGridView
With dgvControlArr(dgvIterator)
.Size = New System.Drawing.Size(0, 0)
.AutoSize = True
.EnableHeadersVisualStyles = False
.RowHeadersVisible = False
.BackgroundColor = Color.White
.BorderStyle = BorderStyle.None
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToOrderColumns = False
.AllowUserToResizeColumns = False
.AllowUserToResizeRows = False
.ReadOnly = True
.MultiSelect = False
End With
Dim colID_2 As New System.Windows.Forms.DataGridViewTextBoxColumn
With colID_2
.HeaderText = "ID"
.Name = "colID"
.HeaderCell.Style.BackColor = Color.SpringGreen
.HeaderCell.Style.ForeColor = Color.White
.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Width = 300
End With
Dim colG_2 As New System.Windows.Forms.DataGridViewButtonColumn
With colG_2
.HeaderText = "G"
.Name = "colG"
.HeaderCell.Style.BackColor = Color.SpringGreen
.HeaderCell.Style.ForeColor = Color.White
.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Width = 40
End With
Dim colI_2 As New System.Windows.Forms.DataGridViewTextBoxColumn
With colI_2
.HeaderText = "I"
.Name = "colI"
.HeaderCell.Style.BackColor = Color.SpringGreen
.HeaderCell.Style.ForeColor = Color.White
.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
End With
Dim colO_2 As New System.Windows.Forms.DataGridViewTextBoxColumn
With colO_2
.HeaderText = "O"
.Name = "colO"
.HeaderCell.Style.BackColor = Color.SpringGreen
.HeaderCell.Style.ForeColor = Color.White
.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
End With
Dim colQ_2 As New System.Windows.Forms.DataGridViewTextBoxColumn
With colQ_2
.HeaderText = "Q"
.Name = "colQ"
.HeaderCell.Style.BackColor = Color.SpringGreen
.HeaderCell.Style.ForeColor = Color.White
.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
End With
Dim colIn_2 As New System.Windows.Forms.DataGridViewTextBoxColumn
With colIn_2
.HeaderText = "In"
.Name = "colIn"
.HeaderCell.Style.BackColor = Color.SpringGreen
.HeaderCell.Style.ForeColor = Color.White
.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
End With
dgvControlArr(dgvIterator).Columns.AddRange(colID_2, colG_2, colI_2, colO_2, colQ_2, colIn_2)
With dgvControlArr(dgvIterator)
.Columns("colID").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns("colG").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns("colI").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns("colO").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns("colQ").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns("colID").SortMode = DataGridViewColumnSortMode.NotSortable
.Columns("colG").SortMode = DataGridViewColumnSortMode.NotSortable
.Columns("colI").SortMode = DataGridViewColumnSortMode.NotSortable
.Columns("colO").SortMode = DataGridViewColumnSortMode.NotSortable
.Columns("colQ").SortMode = DataGridViewColumnSortMode.NotSortable
End With
With dgvControlArr(dgvIterator).Rows
.Add("01")
.Add("02")
.Add("03")
.Add("04")
.Add("05")
End With
dgvControlArr(dgvIterator).Rows(1).Cells(2).Value = "Y"
dgvControlArr(dgvIterator).Rows(0).Cells(5).Value = "sample 1"
dgvControlArr(dgvIterator).Rows(2).Cells(5).Value = "sample 3"
dgvControlArr(dgvIterator).Rows(3).Cells(5).Value = "sample 4"
dgvControlArr(dgvIterator).Rows(3).Cells(2).Value = "Y"
dgvControlArr(dgvIterator).Rows(0).Cells(2).Value = "Y"
AddHandler dgvControlArr(dgvIterator).SelectionChanged, AddressOf Me.DataGridViews_SelectionChanged
AddHandler dgvControlArr(dgvIterator).CellContentClick, AddressOf Me.DataGridViews_CellContentClick
Next
Me.Controls.AddRange(dgvControlArr)
GridViewStackOrder()
End Sub
Код для упорядочивания моих местоположений datagridview
Private Sub GridViewStackOrder()
dgvControlArr(0).Location = New System.Drawing.Point(10, 250)
dgvControlArr(1).Location = New System.Drawing.Point(10, 750)
dgvControlArr(2).Location = New System.Drawing.Point(10, 1250)
dgvControlArr(3).Location = New System.Drawing.Point(10, 1750)
End Sub
Код для моих обработчиков событий
Private Sub DataGridViews_SelectionChanged(sender As System.Windows.Forms.DataGridView, e As EventArgs)
sender.ClearSelection()
End Sub
Private Sub DataGridViews_CellContentClick(sender As System.Windows.Forms.DataGridView, e As DataGridViewCellEventArgs)
If e.RowIndex < 0 OrElse Not e.ColumnIndex = sender.Columns(1).Index Then Return
If e.RowIndex >= 0 Then
If sender.Rows(e.RowIndex).Cells(2).Value = "Y" Then
Dim chosenID As String = sender.Rows(e.RowIndex).Cells(5).Value
MsgBox(chosenID)
Else
MsgBox("Input not available.")
End If
End If
End Sub
Моя цель здесь — создать столбцы и строки для всего gridview, а не только для первого. Также я хотел бы запретить выбор для всех datagridviews, поэтому я создал обработчик selection_changed. Я знаю, что это довольно просто, но, пожалуйста, ваши идеи будут очень полезны. Спасибо, гении!
Ответ №1:
У вас опечатка в коде. Вы объявляете счетчик следующим образом:
Dim dgvIterator As Short
Теперь вот в чем ваша проблема, вы смешиваете dgv и dvg.
For dvgIterator = 0 To 3
dgvControlArr(dvgIterator) = New System.Windows.Forms.DataGridView
Чтобы исправить это, просто замените приведенные выше строки следующими:
For dgvIterator = 0 To 3
dgvControlArr(dgvIterator) = New System.Windows.Forms.DataGridView