0

かなり奇妙な何か。バインドされていない CheckBox 列を持つ DataGridView があります。ComboBox の選択された項目が変更されると、DataGridView の DataSource が更新されます (ComboBox で選択されている内容に応じて、ここにはバインディングはなく、条件ステートメントのみです)。DataSource が更新された後、コレクションを反復処理し、それに応じて CheckBox 列の値を設定します。これはうまくいきます。ただし、コンストラクターで ComboBox の SelectedItem を設定して、フォームの読み込み時に ComboBox に値が存在するようにすることにしたとき、同じメソッドで CheckBox セルの状態を更新できませんでした。デバッガーは、値が true に設定されていることを示しています。

public LocksForm()
    {
        InitializeComponent();

        AddDataGridColumns();
        GetLookupData();

        cboLockType.SelectedIndexChanged += cboLockType_SelectedIndexChanged;

        //Setting this fires the event but the checkboxes in the grid remain unchecked
        cboLockType.SelectedItem = cboLockType.Items[0];

    }

private void cboLockType_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Bind the data to the grid etc.

        UpdateLocks()
    }

// This works but not when fired from the Form constructor, only when user selects a value from ComboBox at Runtime
private void UpdateLocks()
    {
        if (_lockedIDs != null && _lockedIDs.Any())
        {
            for (int j = 0; j < dgLocks.RowCount; j++)
            {
                if (_lockedIDs.Contains((Guid)dgLocks[0, j].Value))
                {
                    dgLocks[1, j].Value = true;
                }

            }

        }
    }
4

1 に答える 1

0

コンストラクターに「Shown」EventHandler を入れるとうまくいきました。

this.Shown += LocksForm_Shown;

void LocksForm_Shown(object sender, EventArgs e)
    {
        cboLockType.SelectedItem = cboLockType.Items[0]; 
    }

しかし、これはなぜそれが起こるのかを説明していません。誰かが知っているなら、私は答えを聞くことに興味があります。

于 2013-06-20T11:55:23.807 に答える