Тонны возможных решений для этого, но, пожалуйста, забудьте stati c!
1st:
вернуть список из другой ответ, используйте его так:
public partial class AddInstitutionStart : Window
{
public AddInstitutionStart()
{
InitializeComponent();
foreach(string cat in new FillCombo().fillInstCategory())
ComboBoxInstitutionCategory.Items.Add(cat);
}
}
или, если существует AddRange
:
public partial class AddInstitutionStart : Window
{
public AddInstitutionStart()
{
InitializeComponent();
ComboBoxInstitutionCategory.Items.AddRange(new FillCombo().fillInstCategory());
}
}
Это первое решение заполняет список в fillInstCategory()
, а затем заполняет combobox через foreach или addrange.
2nd:
сделать его перечисляемой функцией (используйте то же, что и выше):
Только 2 изменения в вашем коде , 1-е:
public IEnumerable<string> GetInstCategory()
{
...
}
, затем расширите слово return на yield :
while (dr.Read())
yield return dr.GetString(0);
, заполняет комбинированный список сразу после каждого чтения данных (не один раз, когда все данные читаются как с решением 1), потому что приводит к вызывает скачок назад и вперед между Items.Add
и While(dr.Read())
части кода.
3-й:
введите метод (или лямбда-выражение):
Только 2 изменения в вашем коде, 1-е:
public void GetInstCategory(Action<string> Injection)
{
...
}
затем:
while (dr.Read())
Injection(dr.GetString(0));
Используйте это как:
public partial class AddInstitutionStart : Window
{
public AddInstitutionStart()
{
InitializeComponent();
new FillCombo().fillInstCategory(ComboBoxInstitutionCategory.Items.Add)) //note there is no "(" and ")" after Add, so the addition doesnt happen, just the function was passed to "fillInstCategory" to use it whenever necessary.
}
}
Это заполняет ваш комбинированный список так же, как и решение 2: читает 1 данные, затем добавляет 1 в комбинированный список, затем снова читает ...
Надеюсь, вы чему-то научитесь из этого.