将值设置为ComboBoxs项目#C

问题描述:

我试图在组合框中的项目上设置值,但每次尝试时都会得到结果'null'。我是否定义了错误的价值,还是我试图以错误的方式获得价值?将值设置为ComboBoxs项目#C

// Setting the value 
sqlCmd.CommandText = "SELECT Id, Ime FROM Unajmljivaci WHERE Aktivan = 0"; 
conn.Open(); 
using (var reader = sqlCmd.ExecuteReader()) 
{ 
    while (reader.Read()) 
    { 
     cmbUnajmljivaci.Items.Add(new { Id = reader["Id"].ToString(), Ime = reader["Ime"].ToString() }); 
    } 
    cmbUnajmljivaci.ValueMember = "Id"; // <--- 
    cmbUnajmljivaci.DisplayMember = "Ime"; 
} 

//Retrieving the value 
sqlCmd.Parameters.AddWithValue("@SifraUnajmljivca", Convert.ToString(cmbUnajmljivaci.SelectedValue)); 
+0

究竟是怎么回事?你在cmbUnajmljivaci.Items.Add语句中收到任何错误吗? –

+0

WinForms或WPF? – sebingel

+0

@TheShooter我没有得到任何错误,它只是保存'null'而不是我想要的值。 –

  using (SqlConnection sqlConn = new SqlConnection("CONNECTION STRING")) 
      { 
       DataSet ds = new DataSet(); 
       SqlCommand sqlCmd = sqlConn.CreateCommand(); 
       sqlConn.Open(); 
       SqlDataAdapter SQA_DataAdapter = new SqlDataAdapter(sqlCmd); 
       SQA_DataAdapter.SelectCommand = new SqlCommand("SELECT Id, Ime FROM Unajmljivaci WHERE Aktivan = 0", sqlConn); 
       SQA_DataAdapter.Fill(ds, "Table"); 
       if (ds != null) 
       if (ds .Tables.Count > 0) 
       { 
        cmbUnajmljivaci.ValueMember = "Id"; 
        cmbUnajmljivaci.DisplayMember = "Ime"; 
        cmbUnajmljivaci.DataSource = ds.Tables[0]; 
       } 
       sqlConn.Close(); 
      } 
+0

可以使用一些解释去代码转储 – MikeT

您需要设置组合框的数据源。

+0

你能给我多一点请详细回答?我不知道你是如何设置数据源的。 –

+0

cmbUnajmljivaci.DataSource = ; –

尝试所获得的价值是这样的:

dynamic dyn = cmbUnajmljivaci.SelectedItem; 
string s = dyn.Id; 

甚至内嵌这样的:对于参考,您的问题

//Retrieving the value 
sqlCmd.Parameters.AddWithValue("@SifraUnajmljivca", Convert.ToString(((dynamic)cmbUnajmljivaci.SelectedItem).Id); 

示例代码,

DataSet ds = new DataSet(); 
    DataTable dt = ds.Tables.Add(); 
    dt.Columns.Add("ID"); 
    dt.Columns.Add("Name"); 
    dt.Rows.Add("0", "Item1"); 
    dt.Rows.Add("1", "Item2"); 

对于插入您需要的具有指定索引的项目使用下面的代码

//Insert the item into the collection with specified index 
     foreach (DataRow row in dt.Rows) 
     { 
      int id = Convert.ToInt32(row["ID"]); 
      string name=row["Name"].ToString(); 
      comboBox1.Items.Insert(id,name); 

     } 

始终索引应该开始从0(零)

简单的方法增加值组合框

comboBox1.DataSource=dt; 
comboBox1.DisplayMember = "Name"; 
comboBox1.ValueMember = "ID";