У меня очень сложная ситуация, надеюсь, я смогу изобразить.
Итак, у меня есть datagridview, который выглядит так:
DataTable dt = new DataTable();
dataGridViewFood.AutoGenerateColumns = false;
dt.Columns.Add("date", typeof(string));
dt.Columns.Add("food", typeof(int));
DataGridViewTextBoxColumn date = new DataGridViewTextBoxColumn();
date.HeaderText = "date";
date.DataPropertyName = "date";
DataGridViewComboBoxColumn name = new DataGridViewComboBoxColumn();
var list11 = new List<String>() { "food1", "food2", "food3" }; // here later I'll use a mysql select query to fill the list
name.DataSource = list11;
name.HeaderText = "food";
name.DataPropertyName = "food";
dataGridViewFood.DataSource = dt;
dataGridViewFood.Columns.AddRange(date, name);
dataGridViewFood.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
И проблема в том, что столбец food - это тип int, потому что я храню значения в своей базе данных как int (и у меня есть другая таблица, которая определяет, какое число означает, какая еда).
И если я попытаюсь заполнить datagridview вот так:
[...]
reader = commandDatabase.ExecuteReader();
while (reader.Read())
{
dt.Rows.Add(new object[] { reader.GetString(0), reader.GetInt32(1) });
}
DataGridViewTextBoxColumn не может установить правильное значение. Итак, что мне нужно, если "reader.GetInt32 (1)" предназначен для ex 1, я хочу установить в поле со списком "food2" и т. д.
Заранее спасибо!
Аа, извини, отредактирую И да, они такие же, но заливка адаптера мне не подходит, потому что запрос возвращается с целыми числами, и я хочу установить строку поля со списком на это целое число, а не заполнять список поля со списком этим.
Это не исключает наличия DataAdapter, это просто означает, что для его настройки нужно выполнить один или два шага. Вы говорите о совершенно рутинной практике чего-то вроде [ {"apple", 1}, {"orange"}, 12], когда вы показываете текст пользователю, но сохраняете числовой идентификатор? Изучите базу данных, dgv, combo, и вы получите много-много-много хитов здесь.
@Plutonix, ты прав! Но я не лучший в поисках, можешь показать мне что-нибудь, что могло бы мне помочь?
Я дал вам точные условия поиска !!! datagridview data binding combobox cell приносит 61 000 просмотров! 13 900 только на этом сайте,
Мой плохой, я имел ввиду как установить выпадающий список? Потому что, как я вижу, dt.Rows.Add (...) не может его установить.
«исследование» - это не то же самое, что «гуглить код». Последний работает, когда вам нужно напоминание о чем-то вроде порядка аргументов. Исследовать читает статьи по этой теме, чтобы в деталях понять, какой новый аспект вы программируете - программирование - это больше, чем синтаксис. Тем не менее, у вас будет 2 источника данных. 1 для столбца DGV и еще один для столбца CBO. Этот столбец CBOcolumn выполняет сопоставление с помощью DisplayMember и ValueMember. Он показывает одно, но сохраняет другое в DataSource для вас (и вам все равно не следует добавлять какие-либо строки вручную)
Но мне нужно добавлять строки «вручную», потому что я их форматирую и не могу отформатировать с заливкой. Я искал последний час и все еще не могу решить свою проблему. Я считаю, что это невозможно ...
Если food cbo представляет собой пару {String, int}, и вы показываете имя, что нужно отформатировать? Если это ужасный столбец даты / строки, это совсем другая плохая идея. DGV включает в себя возможности формата отображения.
Наконец-то я как-то это сделал. Спасибо за помощь!





Что такое
dtв последнем фрагменте? Если это тот же dt, что и выше, вы должны заполнить таблицу данных, используя либо DataAdapter, либо объект DBCommand. Не уверен, какое отношение это имеет к танцу с колонкой комбо