0

Windows FormsDataGridViewのクラスについて助けが必要です。それが私だけかどうかはわかりませんが、プログラムでこのクラスに本当に苦労しています。

aをa に aColumnとして追加するという単純な作業は簡単だと思うかもしれませんが、明らかにそうではありません。プログラムでそれを行う必要がある理由は、DataGridView の各行に複数の ComboBoxes が必要であり、選択可能なドロップダウン項目が他の 1 つ以上の選択に依存するなどです...ComboBoxDataGridView

を初期化する方法は次のとおり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)をクリックすると、聞いているイベントが発生しますTreeViewOnBeforeSelect次に、 を使用して、 Fluent NHibernate ( ORMTreeNodeDecorator.Id )を介して関連オブジェクトのリストを取得します。

_objectDataGridView新しく取得したリストをクリアしてから、 new で埋めたいと思いますRowsOnBeforeSelectイベントをリッスンするメソッドで、 _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.ItemsorDataGridViewComboBoxColumns.DataSourceに正しい項目を入力します。次に、これらの選択が変更されたときにリッスンしComboBoxes、関連する選択可能な項目を入力/変更する必要もありComboBoxesます。

4

1 に答える 1