C# Combo SelectedValue Null

Sans affichage de l'intégralité de mon code (je suis en train de poster la délinquance script), je vais avoir un problème qui semble comme beaucoup de gens ont eu, mais le mien semble pas répondre à d'autres correctifs recommandés. Je suis à l'aide de C# dans VS2008.

Fondamentalement, j'ai une zone de liste déroulante, et lorsque l'élément init est changé, il va vers le code ci-dessous. Fondamentalement, le code va déterminer le pays dans lequel était de sélectionner (myCountryKey) et de passer ensuite que comme un parameted à une procédure stockée qui remplit subséquente d'un comboBox.

Ce qui est bizarre, c'est, le selectedValue se trouve dans de cboCountries montre toujours Nulle. À la lecture de cette question, il semblait que la propriété dropdownStyle était le problème, mais j'ai changé la mienne DropDownList comme l'a recommandé et qui n'a pas fonctionné.

Parce que je utiliser des listes déroulantes beaucoup, j'ai commencé à jouer arond et a constaté que je peux obtenir la propriété SelectedIndex de travail et je peux utiliser le GetItemText bien fonctionner aussi bien (c'est ce que le myCountryKey2 et myCountryKey3 variables sont pour). Cependant, ce que je voudrais vraiment est le SelectedValue, et j'ai fait ce genre de chose avant et juste ne peut pas comprendre pourquoi il ne fonctionne pas.

Est-il un autre combo bien je pourrais avoir accidentellement changé que pourrait faire SelectedValue pas de travail?

private void cboCountries_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlCommand cmd = null;
            SqlDataReader dr = null;

            try
            {
                cmd = util.SqlConn.CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;

                myCountryKey = int.Parse(this.cboCountries.SelectedValue.ToString());  //does not work, says value is null
                myCountryKey2 = int.Parse(this.cboCountries.SelectedIndex.ToString());  //Works fine
                string myCountryKey3 = this.cboCountries.GetItemText(this.cboCountries.SelectedItem).ToString(); //Works fine

                cboDivisions.Enabled = true;
                cboDivisions.Items.Clear();

                //Division parameter
                cmd.CommandText = "proc_parms_division";
                dr = cmd.ExecuteReader();
                while (dr.Read())
                    this.cboDivisions.Items.Add(new ListItem(dr["division_name"].ToString(), dr["division_key"].ToString()));

                dr.Close();
                cmd.Parameters.Clear();
            }
            catch (Exception ex)
            {
                util.LogError(ex);
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (dr != null) dr.Dispose();
                if (cmd != null) cmd.Dispose();
            }
        }

Plus De Code:

       public frmWriteoff()
{
InitializeComponent();
//this.KeyPreview = true;
//this.KeyUp += new KeyEventHandler(frmWriteoff_KeyUp);
//Data objects are unmanaged code.  
//Declare them above the try{} block and always dispose of them in finally{}.
SqlCommand cmd = null;
SqlDataReader dr = null;
try
{
this.cboCountries.DisplayMember = "Label";
this.cboCountries.ValueMember = "Value";
this.cboDivisions.DisplayMember = "Label";
this.cboDivisions.ValueMember = "Value";
this.cboBusinessUnits.DisplayMember = "Label";
this.cboBusinessUnits.ValueMember = "Value";
this.cboMCCs.DisplayMember = "Label";
this.cboMCCs.ValueMember = "Value";
this.cboNodes.DisplayMember = "Label";
this.cboNodes.ValueMember = "Value";
this.cboProductCodes.DisplayMember = "Label";
this.cboProductCodes.ValueMember = "Value";
//Country parameters
cmd = util.SqlConn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "proc_parms_countries_for_user";
cmd.Parameters.Add("@whoAmI", SqlDbType.VarChar).Value = WindowsIdentity.GetCurrent().Name;
dr = cmd.ExecuteReader();
while (dr.Read())
if (dr["country key"].ToString() != "0" && dr["country key"].ToString() != "1")
{
this.cboCountries.Items.Add(new ListItem(dr["country name"].ToString(), dr["country key"].ToString()));
}
cmd.Parameters.Clear();
dr.Close();
}
catch (Exception ex)
{
util.LogError(ex);
MessageBox.Show(ex.Message);
}
finally
{
if (dr != null) dr.Dispose();
if (cmd != null) cmd.Dispose();
}
}
Avez-vous réellement définir la liaison sur la Valeur de la propriété de la délinquance de la zone de liste déroulante, ou à condition que la valeur lors de l'ajout d'un nouveau listitem?
James, je l'ai mise à jour mon code ci-dessus de sorte que vous pouvez voir mon ValueMember, ce qui je pense a été ce que vous demandez. Comprend également le code pour le chargement initial de cboCountries de zone de liste déroulante. Merci.

OriginalL'auteur Ryan Ward | 2013-06-25