0

希望我听起来不会令人困惑,但我不确定我想要达到的目标是否可行。

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

这是我的选择语句:

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。

4

3 回答 3

1

您可以按如下方式从数据表中获取 guid,其中 yourselectedid 是组合框选定项 id。

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

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

于 2013-07-30T18:29:12.143 回答
0

基本上与我在这里发布的答案相同:

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

 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())
            }
   }
于 2013-07-30T18:03:42.277 回答
0

您可以将两个值都放在值成员中,用分隔符分隔,例如:“12;0000-000-0000”,然后用 String.Split 再次分隔值成员。

于 2013-07-30T19:04:27.417 回答