希望我听起来并不令人困惑,但我不确定我想要的是否可能。
我有一个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。
答案 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分开。