如何为vb.net中的另一个datagridview中的每个新行创建一个新的DataGridView控件?

时间:2011-09-24 17:22:02

标签: mysql sql vb.net datagridview

我有一个DataGridView控件(DataGridView6),它显示了一个管理器列表。我想在每次向列表添加新管理器并将其放在表单上的特定位置时生成新的DataGridView

编辑:

如果我有一个主数据网格视图,并且我想在其下方添加另一个相同大小的数据网格视图,我将如何使用您在下面的答案中描述的事件处理程序方法实现此目的?我不确定这是否是在节目中显示新成员的最有效方式......

我怎样才能尽可能简单地做到这一点?

2 个答案:

答案 0 :(得分:1)

使用DataGridView的“RowsAdded”事件。每次向DataGridView6添加一个新行(即管理器)时,请让事件处理程序创建一个新的DataGridView并将其放在您想要的位置。

如果没有实施的具体细节,很难给出更详细的答案,但这样的事情应该有效。

编辑 - 这样的事情?

DataGridView dgv = new DataGridView();
dgv.Location = new Point(DataGridView6.Location.X,DataGridView6.Location.Y + <somevalue>);

如果您需要在此下方添加它们,您可以创建一个变量NextY,每次添加新变量时都会增加。您可以将它们全部存储在LinkedList或类似的东西中,以便您可以按顺序轻松访问它们。

答案 1 :(得分:0)

我不擅长VB,所以我先用C#编写它:

DataGridView DataGridView6;
DataGridView DataGridView7;

DataGridViewRow CreateRow(object data) {
  DataGridViewRow row = null;
  int index = DataGridView6.Rows.Add();
  row = DataGridView6.Rows[index];
  // row.Cells[0] = something;
  // basically, add your date
  return row;
}

void DisplayManagerRow(DataGridViewRow row) {
  DataGridView7.DataSource = null;
  int columns = (DataGridView6.Columns != null) ? DataGridView6.Columns.Count : 0;
  if ((row != null) && (0 < columns)) {
    DataGridView7.Columns.Clear();
    List<DataGridViewColumn> cols = new List<DataGridViewColumn>(columns);
    for (int i = 0; i < columns; i++) {
      DataGridViewColumn dgvCol = (DataGridViewColumn)DataGridView6.Columns[i].Clone();
      DataGridView7.Columns.Add(dgvCol);
    }
    DataGridView7.Rows.Add(row);
  }
}

现在,在VB中尝试这个:

private DataGridView6 As DataGridView
private DataGridView7 As DataGridView

Private Function CreateRow(ByVal data As Object) As DataGridViewRow
  Dim index As Int16 = DataGridView6.Rows.Add()
  Dim row As DataGridViewRow = DataGridView6.Rows(index)
  ' row.Cells(0) = something
  ' basically, add your date
  Return row
End Function

Private Sub DisplayManagerRow(ByVal row As DataGridViewRow)
  DataGridView7.DataSource = Nothing
  Dim columns As Int32 = 0
  If Not (DataGridView6.Columns = Nothing) Then
    columns = DataGridView6.Columns.Count
  End If
  If ((row Is Not Nothing) And (0 < columns)) Then
    DataGridView7.Columns.Clear()
    Dim cols As List<DataGridViewColumn> = new List<DataGridViewColumn>(columns)
    For (Dim i As Int32 = 0; i < columns; i++) 
      Dim dgvCol As DataGridViewColumn = CType(DataGridView6.Columns(i).Clone(), DataGridViewColumn)
      DataGridView7.Columns.Add(dgvCol)
    Next For
    DataGridView7.Rows.Add(row)
  End If
End Sub

我甚至不记得如何在VB中编写For循环!可怜!

这是否可以解决问题?

这是你想要做的吗?