2014-07-05 59 views
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處理程序。我知道這是非常基本的,但拜託,你的想法會非常有幫助。感謝天才!

回答

0

您的代碼中存在拼寫錯誤。你聲明計數器如下:

Dim dgvIterator As Short 

現在,這裏是你的問題,你是混合d GV和d VG

For dvgIterator = 0 To 3 
    dgvControlArr(dvgIterator) = New System.Windows.Forms.DataGridView 

爲了解決這個問題,只是用下面的行替換上面的行:

For dgvIterator = 0 To 3 
    dgvControlArr(dgvIterator) = New System.Windows.Forms.DataGridView 
相關問題