Добавление ComboBox в DataGridView программно - PullRequest
0 голосов
/ 16 мая 2018

enter image description here

Предположим, я создал этот DataGridView в режиме конструктора.

Теперь мне нужно добавить элементы в столбец ComboBox программно и показать элемент с индексом = 0.

Следующий код загружает ComboBox.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

        dataGridView1.Rows.Add("1st Col", "2nd Col");
        Column3.Items.Add("AAAA");
        Column3.Items.Add("BBBB");
        Column3.Items.Add("CCCC");

    }
}

Но не показывает 0-й элемент.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Вы должны установить текущее значение для каждой ячейки в вашем столбце.

for (int i = 0; i < dataGridView.RowCount; i++)
    dataGridView[3, i].Value = "AAAA";
0 голосов
/ 16 мая 2018

Я предлагаю вам альтернативный способ установки значения по умолчанию / начального значения DataGridViewComboBoxColumn, используя пользовательский CellTemplate.

Предполагая, что (из показанного изображения) вашСтолбец ComboBox равен Column[2], вы можете присвоить ему этот пользовательский CellTemplate, который можно инициализировать значением по умолчанию:
(Здесь значение по умолчанию имеет тип String, но вы можете сделать его универсальным, если необходимо)

public class ComboBoxCell : DataGridViewComboBoxCell
{
    private static string psDefaultValue;
    public ComboBoxCell()
        : base() { this.Value = psDefaultValue; }

    public void DefaultValue(string Value)
    {
        psDefaultValue = Value;
        this.Value = Value;
    }
    public override Type ValueType => typeof(String);
    public override object DefaultNewRowValue => psDefaultValue;
}

При инициализации DataGridView назначьте пользовательский CellTemplate для DataGridViewComboBoxColumn:

ComboBoxCell ComboBoxCellTemplate = new ComboBoxCell();
dataGridView1.Columns[2].CellTemplate = ComboBoxCellTemplate;

Затем, после заполненияВ списке элементов ComboBox определите значение по умолчанию и назначьте его с помощью пользовательского метода DefaultValue() CellTemplate:

((DataGridViewComboBoxColumn)dataGridView1
                            .Columns[2])
                            .Items.AddRange(new string[] { "Item1", "Item2", "Item3" });

((ComboBoxCell)dataGridView1.Columns[2]
                            .CellTemplate)
                            .DefaultValue(((DataGridViewComboBoxColumn)dataGridView1
                            .Columns[2]).Items[0].ToString());

После этого определите источник данных DatagridView.Таким образом, для всех новых строк DataGridVieewComboBoxColumn представит значение по умолчанию, в данном случае первый элемент ComboBox.

0 голосов
/ 16 мая 2018

Вы можете попробовать:

private void Form1_Load(object sender, EventArgs e)
{
    DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
    cmb.Items.Add("AAAA");
    cmb.Items.Add("BBBB");
    cmb.Items.Add("CCCC");

    dataGridView1.Rows.Add("1st Col", "2nd Col");
    dataGridView1.Columns.Add(cmb);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...