Когда возникает исключение или значение источника данных равно нулю, для Displaymember устанавливается пустая строка.
Используя декомпилятор кода .NET, в коде есть комментарии о том, как это работает. Я попробую перефразировать.
Исключения могут быть вызваны в следующих случаях:
- Код приложения на DataSourceChanged
- Во время связывания, когда данные форматируются для отображения
- Если значение DisplayMember недопустимо в новом источнике данных.
В комментарии также упоминается, что фактическое исключение "проглочено", чтобы не нарушать ожидаемое поведение.
Я лично столкнулся с таким поведением, и поскольку исключение не выдается, трудно выяснить, какое из этих условий вызвало сброс. Возможно, есть лучший способ, но сейчас я использую это в своем пользовательском элементе управления.
Свойство Datasource допустимо при установке DisplayMember после его сброса, поэтому я действительно не уверен, почему это происходит сбой:
public new object DataSource
{
get { return base.DataSource; }
set
{
string displayMem = this.DisplayMember;
base.DataSource = value;
if (string.IsNullOrEmpty(this.DisplayMember) && string.IsNullOrEmpty(displayMem))
this.DisplayMember = displayMem;
DetermineDropDownWidth();
}
}