2011-09-24 20 views
1

私はマネージャのリストを表示するDataGridViewコントロール(DataGridView6)を持っています。私はリストに新しいマネージャーを追加し、それを私のフォームの特定の場所に入れるたびに、新しいDataGridViewを生成したいと思います。vb.netの別のdatagridviewの新しい行ごとに新しいDataGridViewコントロールを作成するにはどうすればよいですか?

EDIT:

は私がメインのDataGridViewを持っている、と私は直接その下に同じ大きさの別のDataGridViewを追加したい場合は、どのように私は以下のあなたの答えで説明したイベントハンドラメソッドを使用して、これを達成するであろうと言います?しかし、これがプログラムの新しいメンバーを表示する最も効率的な方法であるかどうかはわかりません。

どうすれば簡単にこれを行うことができますか?

+0

最初にDataGridView6をどのように配置していますか?タグが示唆するように –

+0

、私は私のdatagridview6のデータソースとしてmysqlデータベースを使用しています。リストに追加された新しいマネージャごとに新しいdatagridviewを作成したいと思っています。 – daniel11

+0

あなたは冗談ですか?通常、人々はすぐに私の質問に答えるが、2週間以上待っていた.... :( – daniel11

答えて

1

DataGridViewの「RowsAdded」イベントを使用します。 DataGridView6に新しい行(マネージャなど)を追加するたびに、イベントハンドラに新しいDataGridViewを作成させ、必要な場所に配置させます。

具体的な実装がなければ、より詳細な回答は難しいですが、そのようなものはうまくいくはずです。

EDIT - これは何ですか?

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

これを下に追加し続ける必要がある場合は、新しいものを追加するたびに増加する変数NextYを作成するだけです。 LinkedListやそれに類するものの中にそれらをすべて格納することができますので、簡単に順番にアクセスできます。

+0

iveは3日間で有効期限が切れる...:/ – daniel11

+0

答えが更新 – Ignacio

+0

これは完璧な感謝です!どのように私は新しいdatagridviewを配置する場所のxy座標を取得するつもりですか?私は私のマウスを指している場所の現在の座標を表示することができる書くことができる簡単なスクリプトはありますか? – daniel11

0

私はVBで非常に良いではないので、私が最初にC#でそれを書いた:私はいなくてもでき

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 

:今

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でこれを試してみますVBでForループを書く方法を覚えておいてください!哀れな!

しかし、それはどこにポイントを得るか?

これはあなたがやろうとしていることですか?

関連する問題