Windows FormsDataGridView
のクラスについて助けが必要です。それが私だけかどうかはわかりませんが、プログラムでこのクラスに本当に苦労しています。
aをa に aColumn
として追加するという単純な作業は簡単だと思うかもしれませんが、明らかにそうではありません。プログラムでそれを行う必要がある理由は、DataGridView の各行に複数の ComboBoxes が必要であり、選択可能なドロップダウン項目が他の 1 つ以上の選択に依存するなどです...ComboBox
DataGridView
を初期化する方法は次のとおりDataGridView
です。
private void InitializeDataGridView()
{
_objectDataGridView.AutoGenerateColumns = false;
_objectDataGridView.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = "Id",
HeaderText = "Id",
ValueType = typeof(int)
});
_objectDataGridView.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = "Name",
HeaderText = "Name",
ValueType = typeof(string),
AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
});
var objectTypeComboBoxColumn = new DataGridViewComboBoxColumn
{
DataPropertyName = "Type",
HeaderText = "Object Type",
ValueType = typeof(ObjectType),
ValueMember = "Id",
DisplayMember = "Name",
DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
};
_objectDataGridView.Columns.Add(objectTypeComboBoxColumn);
var containerComboBoxColumn = new DataGridViewComboBoxColumn
{
DataPropertyName = "Container",
HeaderText = "Container",
ValueType = typeof(Container),
ValueMember = "Id",
DisplayMember = "Name",
DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
};
_objectDataGridView.Columns.Add(containerComboBoxColumn);
}
この時点まで、すべてが順調です。TreeNodeDecorator
(から派生したTreeNode
)をクリックすると、聞いているイベントが発生しますTreeView
。OnBeforeSelect
次に、 を使用して、 Fluent NHibernate ( ORMTreeNodeDecorator.Id
)を介して関連オブジェクトのリストを取得します。
_objectDataGridView
新しく取得したリストをクリアしてから、 new で埋めたいと思いますRows
。OnBeforeSelect
イベントをリッスンするメソッドで、 _objectDataGridView
. DataSource
このような。
private void SetDataSource(IEnumerable<Object> assignedObjects)
{
var dataTable = new DataTable();
dataTable.Columns.Add("Id");
dataTable.Columns.Add("Name");
dataTable.Columns.Add("Type");
dataTable.Columns.Add("Container");
foreach(var assignedObject in assignedObjects)
{
dataTable.Rows.Add(assignedObject.Id,
assignedObject.Name,
assignedObject.ObjectType,
assignedObject.Container);
}
_objectDataGridView.DataSource = dataTable;
}
しかし、 の選択項目を設定できていませんDataGridViewComboBoxColumns
。を作成したときに選択可能なアイテムの静的セットを設定することもできましたがDataGridViewComboBoxColumns
、それらのアイテムを動的かつ個別に行ごとに追加し、同じ行の他のコンボボックスで選択したアイテムに従って追加する必要があります。そして、私はそれを行う方法が本当にわかりません。
聞く必要があるイベントがあると思います。そこからDataGridViewComboBoxColumns.Items
orDataGridViewComboBoxColumns.DataSource
に正しい項目を入力します。次に、これらの選択が変更されたときにリッスンしComboBoxes
、関連する選択可能な項目を入力/変更する必要もありComboBoxes
ます。