0
我正在創建一個子例程,根據我所需的循環次數創建datagridviews。我假設問題是,要爲每個datagridview創建的列都被合併到第一個創建的datagridview中。我假設這是因爲我看到沒有列和行的其他datagridviews(只是灰色背景)。我的假設是我的列變量聲明不適合我想要做的事情。請參閱我的代碼。循環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處理程序。我知道這是非常基本的,但拜託,你的想法會非常有幫助。感謝天才!