从组合框获取选择语句列信息

时间:2013-07-30 17:54:55

标签: c# winforms combobox

希望我听起来并不令人困惑,但我不确定我想要的是否可能。

我有一个select语句来获取name,id,guid。我将显示设置为名称,并将每个组合框的值设置为Id。有没有办法我可以将guid分配给组合框,以便我可以在我的winforms应用程序中使用它?

这是我对select语句的要求:

private void secondChild_drp_SelectedIndexChanged(object sender, EventArgs e)
    {
        string secondChildId = secondChild_drp.SelectedValue.ToString();
        using (SqlConnection con = new SqlConnection(conString))
        {
            con.Open();
            using (SqlDataAdapter sda = new SqlDataAdapter("SELECT ... WHERE em.ChildID = (" + secondChildId + ")", conString))
            {
                DataTable dt = new DataTable();
                sda.Fill(dt);
                thirdChild_drp.ValueMember = "ID";
                thirdChild_drp.DisplayMember = "DisplayName";
                thirdChild_drp.DataSource = dt;
            }
        }
        cmd.CommandText="StoreProcName";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@ChildID", secondChildId);
        cmd.Connection = con2;
        con2.Open();
        reader = cmd.ExecuteReader();
        var guid = reader.ToString();
        reader.Close();
        con2.Close();
    }

现在,当我运行它时,它告诉我reader = cmd.ExecuteReader();Procedure or function StoreProcName has too many arguments specified.

我只想获得与传入的id相关的guid。

3 个答案:

答案 0 :(得分:1)

您可以从您的数据表获取guid,如下所示,其中yourselectedid是组合框选择项ID。

var results = from row in dt.AsEnumerable()
where row.Field<int>("ID") == yourselectedid
select row;

现在从结果中您可以获得所需的所有列

答案 1 :(得分:0)

基本上和我发布here的答案相同:

您可以从数据库查询中定义一个简单的对象:

 public class Item
 {
        public int ID { get; set; }
        public string DisplayName { get; set; }
        public Guid Guid{ get; set; }
 }

您的实现可能看起来像这样(一些模型数据):

   listBox1.DataSource = items;
   listBox1.DisplayMember = "DisplayName";
   listBox1.ValueMember = "ID";

然后根据您选择的值,您可以查询商品并获取商品:

   var key = (int)listBox1.SelectedValue;
   foreach (var existingItem in items)
   {
            if (existingItem.Key == key)
            {
                //woohoo got it!
               Debug.Print(existingItem.Guid.ToString())
            }
   }

答案 2 :(得分:0)

你可以将两个值都放在value成员中,用分隔符中的任何一个字符分隔如下:“12; 0000-000-0000”然后再将Value Menber与String.Split分开。