【问题标题】:How to change cell's ComboBox style in DataGridViewComboBoxColumn如何在 DataGridViewComboBoxColumn 中更改单元格的 ComboBox 样式
【发布时间】:2011-07-29 07:47:47
【问题描述】:

DataGridViewComboBoxColumn 中的单元格具有 ComboBoxStyle DropDownList。这意味着用户只能从下拉列表中选择值。底层控件是 ComboBox,所以它可以有样式 DropDown。如何更改 DataGridViewComboBoxColumn 中底层组合框的样式。或者,更一般地说,我可以在 DataGridView 中有一个列,其中包含用户可以输入的下拉列表吗?

【问题讨论】:

    标签: .net datagridview


    【解决方案1】:
    void dataGridView1_EditingControlShowing(object sender, 
        DataGridViewEditingControlShowingEventArgs e)
    {
        if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))
        {
            DataGridViewComboBoxEditingControl cbo = 
                e.Control as DataGridViewComboBoxEditingControl;
            cbo.DropDownStyle = ComboBoxStyle.DropDown;
        }
    }
    

    Problem with combobox and databound datagridview

    【讨论】:

    • 这只是解决方案的想法。完整的解决方案需要验证例程,否则 DataGridView 将抛出异常。有用的解决方案通常还需要下拉列表中的单元格特定列表。
    【解决方案2】:

    以下解决方案对我有用

    private void dataGridView1_CellValidating(object sender, 
        DataGridViewCellValidatingEventArgs e) 
    {
        if (e.ColumnIndex == Column1.Index) 
        {
            // Add the value to column's Items to pass validation
            if (!Column1.Items.Contains(e.FormattedValue.ToString())) 
            {
                Column1.Items.Add(e.FormattedValue);
                dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 
                    e.FormattedValue;
            }
        }
    }
    
    private void dataGridView1_EditingControlShowing(object sender, 
        DataGridViewEditingControlShowingEventArgs e) 
    {
        if (dataGridView1.CurrentCell.ColumnIndex == Column1.Index) 
        {
            ComboBox cb = (ComboBox)e.Control;
            if (cb != null) 
            {
                cb.Items.Clear();
                // Customize content of the dropdown list
                cb.Items.AddRange(appropriateCollectionOfStrings);
                cb.DropDownStyle = ComboBoxStyle.DropDown;
            }
        }
    }
    

    【讨论】:

    • 给定的 if 条件在我的数据绑定组合框中总是为真...是否有解决方法...给定条件:============== ==================================================== === if (!Column1.Items.Contains(e.FormattedValue.ToString())) { Column1.Items.Add(e.FormattedValue); dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue; }
    【解决方案3】:
    if (!Column1.Items.Contains(e.FormattedValue.ToString())) { 
        Column1.Items.Add(e.FormattedValue);     
        dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue; 
    }  
    

    可能总是返回 true,因为 Column1.Items.Contains() 正在搜索 String 值。 如果e.FormattedValue 不是String,则比较将失败。

    试试

    if (!Column1.Items.Contains(e.FormattedValue.ToString())) { 
        Column1.Items.Add(e.FormattedValue.ToString());     
        dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue.ToString(); 
    }
    

    if (!Column1.Items.Contains(e.FormattedValue)) { 
        Column1.Items.Add(e.FormattedValue); 
        dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue; 
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2010-10-15
      • 2017-12-23
      相关资源
      最近更新 更多