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;
}
}
}
既存の行の場所が変更された場合、追加の処理が必要になりますが、これが基本的な考え方です。