Я знаю, что есть и другие подобные вопросы, но их решения у меня не работают.
У меня есть следующий код:
lueSizes.Properties.DataSource = new BindingSource(PS.PaperSizes, null);
lueSizes.Properties.Columns.Add(new LookUpColumnInfo("PaperName", "Größe"));
lueSizes.Properties.DisplayMember = "PaperName";
lueSizes.Properties.ValueMember = "PaperName";
//PS is a regular System PrinterSettings object
foreach (PaperSize size in PS.PaperSizes)
//I confirmed with debugging that this actually happens correctly
if (size.RawKind == binSettings.SizeRawKind)
{
lueSizes.EditValue = size;
break;
}
Заполнение LookupEdit источником данных работает нормально, пользователь может выбрать нужный PaperSize из выпадающего списка, и
lueSizes.GetSelectedDataRow () как PaperSize
затем возвращает объект PaperSize, как и ожидалось.
У меня проблема с установкой EditValue, он просто ничего не делает. Я убедился, что во время выполнения DataSource содержит все объекты PaperSize в PS.PaperSizes, включая тот, который находится в цикле foreach. Но установка EditValue = size не приводит к соответствующему обновлению выбранной строки данных.
Другие варианты, которые я пробовал:
lueSizes.EditValue = size.PaperName;
lueSizes.EditValue = lueSizes.Properties.GetKeyValueByDisplayText (size.PaperName);
lueSizes.EditValue = lueSizes.Properties.GetKeyValueByDisplayValue (size.PaperName);
lueSizes.EditValue = lueSizes.Properties.GetKeyValueByDisplayValue (size);
lueSizes.EditValue = 0;
Ничего из этого не делает, выбранный datarow остается NULL и ничего не отображает для пользователя.
Что еще можно попробовать установить выбранный DataRow по коду?
Edit:
private void lueSizes_EditValueChanged(object sender, EventArgs e)
{
object o = lueSizes.EditValue;
object p = lueSizes.GetSelectedDataRow();
PaperSize size = o as PaperSize;
UpdateSize(size);
}
Объект o - это элемент, который я установил ранее, размер PaperSize, который я нашел в цикле, но объект p равен нулю.