0

次のようにDataGridView、1つのComboBox列と1つのTextBox列が動的に作成されています

DataGridViewComboBoxColumn dcColor = new DataGridViewComboBoxColumn();
dcColor.HeaderText = "Color";
dcColor.Items.Add("Red");
dcColor.Items.Add("Green");

DataGridViewTextBoxColumn dcValue = new DataGridViewTextBoxColumn();
dcValue.HeaderText = "Value";

DataGridView1.Columns.Insert(0, dcColor);
DataGridView1.Columns.Insert(1, dcValue);

ユーザーが ComboBox で "Red" アイテムを選択すると、対応する TextBox セルが無効になり、灰色で表示されます。
ユーザーが「緑」の項目を選択すると、対応する TextBox セルが有効になります。

また、datagridview フォームを閉じる前に Green が選択されているときに、ユーザーがデータを入力できるようにするにはどうすればよいでしょうか。

4

2 に答える 2

0

次のコードは、ComboBox 内の項目の選択で機能します

private void _DataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if ((sender as DataGridView).SelectedCells[0].GetType() == typeof(DataGridViewComboBoxCell))
    {
        if ((e.Control as ComboBox) != null)
        {
            (e.Control as ComboBox).SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
            (e.Control as ComboBox).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
        }
    }
}

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    if ((sender as ComboBox).SelectedItem.ToString() == "Red")
    {
        _DataGridView.Rows[_DataGridView.CurrentCell.RowIndex].Cells[1].ReadOnly = true;
    }
    else 
    { 
        _DataGridView.Rows[_DataGridView.CurrentCell.RowIndex].Cells[1].ReadOnly = false;  
    }
}
于 2013-07-17T02:21:39.953 に答える
0

DataGridView の CellValueChanged-Event を使用して、セル値が変更されたかどうかを確認します。これは、TextBoxColumn または ComboBoxColumn のすべての列タイプで同じように機能します。

あなたの例では、色の列が位置0に挿入されている正しい列を確認してください。インデックス1の例では、「赤」が選択されている場合にのみ読み取るように他の列を設定します。

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
    if (e.ColumnIndex == 0) {
        bool disable = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == "Red";
        dataGridView1.Rows[e.RowIndex].Cells[1].ReadOnly = disable;
    }
}

2 番目の質問に対する答えは、フォームの FormClosing-Event を使用して、そこにある行を検証することです。e.Cancel = trueデータが正しくない場合に設定することで、クローズ要求をキャンセルできます。

于 2013-07-16T18:45:02.393 に答える