3

実行時に追加する 2 つの DataGridViewComboBoxColumn があります。最初の DataGridViewComboBoxColumn の項目は、グリッドビューのすべての行で同じままにする必要がありますが、2 番目の DataGridViewComboBoxColumn の項目は、選択した行によって行ごとに異なります。最初の DataGridViewComboBoxColumn の項目

最初の DataGridViewComboBoxColumn が場所を表し、2 番目の DataGridViewComboBoxColumn がサブロケーションを表すとします。だから私は 2 番目の DataGridViewComboBoxColumn 項目を最初の DataGridViewComboBoxColumn から選択した場所のサブロケーションにしたい

4

3 に答える 3

3

1 つのオプションは、サブロケーションのセル レベルでデータソースを変更することです。

グリッドに名前が付けられgrid、2 つのグリッド列にlocationsColumnそれぞれ名前が付けられているとしsubLocationsColumnます。

private void Form1_Load(object sender, EventArgs e)
{
    locationsColumn.DataSource = new string[] { "Location A", "Location B" };
}

次に、グリッドのCellEndEditイベントで:

private void grid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if(locationsColumn.Index == e.ColumnIndex)
    {
        DataGridViewComboBoxCell subLocationCell = 
            (DataGridViewComboBoxCell)(grid.Rows[e.RowIndex].Cells["subLocationsColumn"]);

        string location = grid[e.ColumnIndex, e.RowIndex].Value as String;

        switch (location)
        {
            case "Location A":
                subLocationCell.DataSource = new string[] {
                    "A sublocation 1",
                    "A sublocation 2",
                    "A sublocation 3" 
                };
                break;
            case "Location B":
                subLocationCell.DataSource = new string[] { 
                    "B sublocation 1",
                    "B sublocation 2",
                    "B sublocation 3" 
                };
                break;
            default:
                subLocationCell.DataSource = null;
                return;
        }
    }
}

既存の行の場所が変更された場合、追加の処理が必要になりますが、これが基本的な考え方です。

于 2009-11-20T15:15:10.793 に答える
2

これをチェックしてください。必要なものが概説されていると思います:

http://www.timvw.be/2007/01/17/exploring-datagridviewcomboboxcolumn-databinding/

于 2009-11-11T15:46:32.583 に答える
1

1 つのアイデアは、"SubLocations" 列にセカンダリ バインディング ソースを使用することです。この BindingSource は、[場所] 列で選択された LocationId によってフィルター処理できます。これを行うための鍵は、グリッドの EditingControlShowing および CellValueChanged イベントを使用して、選択した場所が変更されたときに SubLocations 列に適切なフィルタリングを設定することです。

ここに一例があります。

于 2009-01-25T10:34:38.447 に答える