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



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

编辑:

说,如果我有一个主datagridview,我想在它下面直接添加另一个相同大小的datagridview,我如何使用下面的答案中描述的事件处理程序方法来实现这一点?我不确定这是否是在程序中显示新成员的最有效方式…

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

使用DataGridView的"RowsAdded"事件。每次你添加一个新的行(即管理器)到DataGridView6,有事件处理程序创建一个新的DataGridView,并把它放在你想要的地方。

如果没有具体的实现,很难给出更详细的答案,但类似的东西应该可以工作。

编辑-是这样的吗?

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

如果您需要在此下面不断添加它们,您可以创建一个变量NextY,每次添加新变量时都增加该变量。你可以将它们全部存储在LinkedList或类似的东西中,这样你就可以很容易地按顺序访问它们。

我不太擅长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循环!可悲的!

这能说明问题吗?

这是你想要做的吗?

最新更新