List<MyClass> в ComboBox: SelectedIndex всегда -1, почему?
От: J-Pro Молдова  
Дата: 01.06.09 13:11
Оценка:
Всем добрый день!

Столкнулся с проблемой, не могу понять в чём дело.

Имеется такая структура:
public interface IMyBaseClass
{

}

public class MyBaseClass : IMyBaseClass
{
   protected DataRow dataRow = null;

   public MyBaseClass() { }

   public MyBaseClass(DataRow dr)
   {
      this.dataRow = dr;
   }

   protected T GetFieldValue<T>(String fieldName)
   {
     ...
   }

   protected void SetFieldValue<T>(String fieldName, T val)
   {
     ...
   }
}

public class MyClass : MyBaseClass
{
   public string Note1
   {
       get { return GetFieldValue<string>(COLNAME_NOTE1); }
       set { SetFieldValue<string>(COLNAME_NOTE1, value); }
   }

   public override String ToString()
   {
       return Note1;
   }
}


Далее: где-то есть метод, который возвращает мне List<MyClass> myClassList. Так же есть у меня ComboBox: cBox. Что я делаю:
cBox.DataSource = myClassList;

В этот момент вызывается хэндлер cBox_SelectedIndexChanged, НО при этом cBox.SelectedIndex равен -1. При том, что список элементов приходит нормальный(3 элемента, нормально инициализированных).

Я решил, что это может быть потому, что у меня не переопределён метод int GetHashCode() в MyClass, но и это не помогло(я возвращал там "ToString().GetHashCode();").

Посоветуйте, что делать, пожалуйста. Я чувствую что чего-то не хватает, но чего?

Спасибо заранее!


01.06.09 22:39: Перенесено модератором из '.NET' — AndrewVK
-= J-Pro =- with respect
Re: List<MyClass> в ComboBox: SelectedIndex всегда -1, почем
От: samius Япония http://sams-tricks.blogspot.com
Дата: 01.06.09 13:18
Оценка: +1
Здравствуйте, J-Pro, Вы писали:

JP>В этот момент вызывается хэндлер cBox_SelectedIndexChanged, НО при этом cBox.SelectedIndex равен -1. При том, что список элементов приходит нормальный(3 элемента, нормально инициализированных).


Значение SelectedIndex, равное -1, означает что ни один элемент не выделен. Учтите это в своих классах.
Re[2]: List<MyClass> в ComboBox: SelectedIndex всегда -1, по
От: J-Pro Молдова  
Дата: 01.06.09 13:22
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, J-Pro, Вы писали:


JP>>В этот момент вызывается хэндлер cBox_SelectedIndexChanged, НО при этом cBox.SelectedIndex равен -1. При том, что список элементов приходит нормальный(3 элемента, нормально инициализированных).


S>Значение SelectedIndex, равное -1, означает что ни один элемент не выделен. Учтите это в своих классах.


Почему тогда:

1. Если cBox.DataSource'у присвоить список String'ов, то сразу выделяется первый элемент и в хэндлере при этом cBox.SelectedIndex НЕ равен -1?
2. Если в методе cBox_SelectedIndexChanged написать:
cBox.SelectedIndex = 1;

, то он уходит в бесконечную рекурсию, в которой cBox.SelectedIndex никогда не равен 1? Как же тогда из кода выделить элемент?

Что-то тут не так.
-= J-Pro =- with respect
Re[3]: List<MyClass> в ComboBox: SelectedIndex всегда -1, по
От: samius Япония http://sams-tricks.blogspot.com
Дата: 01.06.09 13:32
Оценка:
Здравствуйте, J-Pro, Вы писали:

JP>Здравствуйте, samius, Вы писали:


S>>Здравствуйте, J-Pro, Вы писали:


JP>>>В этот момент вызывается хэндлер cBox_SelectedIndexChanged, НО при этом cBox.SelectedIndex равен -1. При том, что список элементов приходит нормальный(3 элемента, нормально инициализированных).


S>>Значение SelectedIndex, равное -1, означает что ни один элемент не выделен. Учтите это в своих классах.


JP>Почему тогда:


JP>1. Если cBox.DataSource'у присвоить список String'ов, то сразу выделяется первый элемент и в хэндлере при этом cBox.SelectedIndex НЕ равен -1?

Не сразу. Вообще-то SelectedIndex при смене выделения меняется дважды. Первый раз на -1, второй раз на индекс выделенного элемента.

JP>2. Если в методе cBox_SelectedIndexChanged написать:

JP>
JP>cBox.SelectedIndex = 1;
JP>

JP>, то он уходит в бесконечную рекурсию, в которой cBox.SelectedIndex никогда не равен 1? Как же тогда из кода выделить элемент?
Все верно. Присваивание SelectedIndex-а порождает череду (не одно) событий SelectedIndexChanged. Если вы присваиваете новое значение внутри обработчика, то кроме рекурсии ничего хорошего не получите.
Из кода выделить элемент можно, но делать это надо не в обработчике SelectedIndexChanged! Можно и в нем, но очень аккуратно, с проверкой текущего индекса, чтобы не уйти в рекурсию.

JP>Что-то тут не так.
Re: List<MyClass> в ComboBox: SelectedIndex всегда -1, почем
От: J-Pro Молдова  
Дата: 01.06.09 14:12
Оценка:
Здравствуйте, J-Pro, Вы писали:

JP>Всем добрый день!


JP>Столкнулся с проблемой, не могу понять в чём дело.


JP>Имеется такая структура:

JP>
JP>public interface IMyBaseClass
JP>{

JP>}

JP>public class MyBaseClass : IMyBaseClass
JP>{
JP>   protected DataRow dataRow = null;

JP>   public MyBaseClass() { }

JP>   public MyBaseClass(DataRow dr)
JP>   {
JP>      this.dataRow = dr;
JP>   }

JP>   protected T GetFieldValue<T>(String fieldName)
JP>   {
JP>     ...
JP>   }

JP>   protected void SetFieldValue<T>(String fieldName, T val)
JP>   {
JP>     ...
JP>   }
JP>}

JP>public class MyClass : MyBaseClass
JP>{
JP>   public string Note1
JP>   {
JP>       get { return GetFieldValue<string>(COLNAME_NOTE1); }
JP>       set { SetFieldValue<string>(COLNAME_NOTE1, value); }
JP>   }

JP>   public override String ToString()
JP>   {
JP>       return Note1;
JP>   }
JP>}
JP>


JP>Далее: где-то есть метод, который возвращает мне List<MyClass> myClassList. Так же есть у меня ComboBox: cBox. Что я делаю:

JP>
JP>cBox.DataSource = myClassList;
JP>

JP>В этот момент вызывается хэндлер cBox_SelectedIndexChanged, НО при этом cBox.SelectedIndex равен -1. При том, что список элементов приходит нормальный(3 элемента, нормально инициализированных).

JP>Я решил, что это может быть потому, что у меня не переопределён метод int GetHashCode() в MyClass, но и это не помогло(я возвращал там "ToString().GetHashCode();").


JP>Посоветуйте, что делать, пожалуйста. Я чувствую что чего-то не хватает, но чего?


JP>Спасибо заранее!


Ну вот, так всегда бывает. Трахаешься целый день, не находишь решения, потом тратишь минут 10 на описание проблемы в форуме, постишь и через полчаса сам находишь проблему Так и тут. В общем, свойство Note1 всегда было null. Неверное поле брал я из DataRow, вот и всё. Элемент не мог отобразиться, вот вам и -1 в SelectedIndex.

Всем спасибо!
-= J-Pro =- with respect
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.