2016-09-04 2 views
2

У меня есть два поля со списком (скажем cbo_zone & cbo_floor), которые оказывают таблицу в качестве источника данныхкак установить выбранное значение поля со списком в C#

private void load_cbo_zone() 
    { 
     clz_Common_References ccr = new clz_Common_References(); 
     DataTable dt_zone = ccr.get_zone_detail(); 
     cbo_zone.DataSource = dt_zone; 
     cbo_zone.ValueMember = "ID"; 
     cbo_zone.DisplayMember = "zone"; 
     cbo_zone.SelectedIndex = -1; 
    } 

`

private void load_cbo_floor() 
    { 
     int ID_zone_ref = Convert.ToInt16(cbo_zone.SelectedValue); 
     clz_Common_References ccr = new clz_Common_References(); 
     DataTable dt_flr = ccr.get_floor_data_fr_Ref_IDZone(ID_zone_ref); 
     cbo_floor.DataSource = dt_flr; 
     cbo_floor.DisplayMember = "Floor"; 
     cbo_floor.ValueMember = "ID"; 
     cbo_floor.SelectedIndex = -1; 
    } 

`. Я написал код для обновления cbo_floor следующим образом.

private void cbo_zone_SelectionChangeCommitted(object sender, EventArgs e) 
    { 
     load_cbo_floor(); 
    } 

Теперь мне нужно обновить cbo_zone & cbo_floor, когда я нажимаю строку данных DataGridView.

int ref_area_id, ref_floor_id, ref_zone_id; 

     int.TryParse(dt_issued_mat.Rows[0][11].ToString(), out ref_area_id); 
     DataTable dt_area_detail = ccr.get_area_data_fr_area_id(ref_area_id); 
     int.TryParse(dt_area_detail.Rows[0][2].ToString(), out ref_floor_id); 
     DataTable dt_floor_detail = ccr.get_floor_data_fr_floor_id(ref_floor_id); 
     int.TryParse(dt_floor_detail.Rows[0][2].ToString(), out ref_zone_id); 
     DataTable dt_zone_detail = ccr.get_zone_data_fr_zone_id(ref_zone_id); 

после этого с помощью

cbo_zone.Text = dt_zone_detail.Rows[0][1].ToString(); 
cbo_floor.Text = dt_floor_detail.Rows[0][1].ToString(); 

Я был в состоянии отобразить значения на полях со списком, но как только я попытался получить код cbo_floor.SelectedValue не работает.

Тогда я был в состоянии получить соответствующую SelectedIndex помощи,

int index = cbo_zone.FindString(dt_zone_detail.Rows[0][1].ToString()); 
     cbo_zone.SelectedIndex = index ; 

еще поле со списком ничего не показывает & «cbo_zone.SelectedValue» не показать цель value.my, чтобы получить cbo_floor .SelectedValue. Пожалуйста, помогите.

ответ

0

Вместо cbo_zone.Text = dt_zone_detail.Rows[0][1].ToString(); cbo_floor.Text = dt_floor_detail.Rows[0][1].ToString();

Использование

cbo_zone.Items.Add(dt_zone_detail.Rows[0][1].ToString()); 

cbo_floor.Items.Add (dt_floor_detail.Rows[0][1].ToString());

+0

поскольку комбо-боксы имеют источник данных выше команды и не выполняются. –

0

Первая работа с индексами не является хорошей идеей. У вас есть значение, используйте их. Использование индекса приведет к возникновению проблем.

cbo_zone.SelectedValue = myValue.ToString();//find the value from your data 

Во-вторых для выбора пола, вам необходимо заполнить его с соответствующими значениями первым, поскольку он уже имеет данные для последнего выбора.

load_cbo_floor(); 
    cbo_floor.SelectedValue = myValue.ToString();//find the value from your data 
Смежные вопросы