2014-10-27 60 views
0

我想知道是否有人有一個建議或提示,以改善我的代碼的以下功能。基本上我做了一個更新/修改表單,它填充了一個DataBase的表中的字段,到目前爲止,一切都很好,直到我到達組合框。動態更新組合框的更好方法?

我有三個人,角色,地位和性別。問題是,當我裝了當前用戶的信息是這樣的:

Dim lstDatos As New ArrayList() 
    lstDatos = gestorUsuario.consultarUsuario(idUsuario) 

    txtNombre1.Text = lstDatos(0) 
    txtNombre2.Text = lstDatos(1) 
    txtApellido1.Text = lstDatos(2) 
    txtApellido2.Text = lstDatos(3) 
    cmbGenero.DisplayMember = lstDatos(4) 'HERE 
    txtCorreo.Text = lstDatos(5) 
    txtCedula.Text = lstDatos(6) 
    txtTelefono.Text = lstDatos(7) 
    cmbRol.Text = lstDatos(8)  'HERE 
    cmbEstado.Text = lstDatos(9)  'And Here 

只有用戶當前的ROL,埃斯塔和性別可以選擇,要解決,我提出以下幾點:

Private Sub updateRol(sender As Object, e As EventArgs) Handles cmbRol.Click 

    actualizarComboBox() 

End Sub 

哪調用actualizarFunction:

Private Sub actualizarComboBox() 

    cmbGenero.Items.Add("Masculino") 
    cmbGenero.Items.Add("Femenino") 

    cmbEstado.DataSource = gestorUsuario.consultarEstados 
    cmbEstado.DisplayMember = "nombre_estado" 
    cmbEstado.ValueMember = "id_estado" 

    cmbRol.DataSource = gestorRol.consultarRoles 
    cmbRol.DisplayMember = "nombre" 
    cmbRol.ValueMember = "id_rol" 

End Sub 

它還挺作品是誠實的,但...第一次下拉框中選擇你可以看到一個明顯的跳躍,當它加載其他OPTIO ns,當我點擊組合框時,它會自動丟失用戶當前信息的「佔位符」,直到第一個選項。

所以,如果我有:

* B

正如我的用戶的當前cmbRol.Text和我點擊它閃爍了一下,更改組合框:

* A -B -C

其中*表示選定或高亮選項。 如果有人有任何建議或提示,我將非常感激。非常感謝。

+0

事實上,你需要打電話給你'actualizarComboBox()'在FormLoad(),那麼你可以將值設置爲當前選項 – 2014-10-27 06:52:34

+0

@ Nadeem_MK但是,如果我這樣做,我不想改變該用戶的名單或性別等,我將不得不重新分配他/她的這些選項,每次我保存其他領域。 – 2014-10-27 14:40:10

+1

哦,這意味着gendre可能會留空嗎?在這種情況下,您仍然可以添加一個通用值作爲列表中的第一項,例如'_Choose a option_'。 – 2014-10-27 14:42:03

回答

1

更換

cmbGenero.DisplayMember = lstDatos(4) 'HERE 
cmbRol.Text = lstDatos(8)  'HERE 
cmbEstado.Text = lstDatos(9)  'And Here 

此:

cmbGenero.SelectedItem = lstDatos(4) 'SelectedItem is sufficient because cmbGenero is not binding to Data Base 
cmbRol.SelectedValue = lstDatos(8) 'SelectedValue is required because cmbRol and cmbEstado is binding to Data Base 
cmbEstado.SelectedValue = lstDatos(9)