繁体   English   中英

从comboBox中获取选定的值

[英]Get selected value from comboBox

我正在使用C#,winforms。

遇到了一个小问题。 我尽可能地调试,这让我相信我正在使用的代码导致问题。 好的,我有一个充满查询数据的组合框。

有2列“名称”和“键码”。 我只使用以下方式显示名称:

accCollection.DisplayMember = "name";

然后我使用以下内容来获取与名称对应的keycode值。

string acct = accCollection.SelectedValue.ToString();

我遇到的问题是键码与名称不匹配。 我虽然这可能是我的查询,所以我做的是在填充comboBox之前在数据网格视图中显示查询结果。 数据网格视图显示正确的结果,这使我相信我使用了错误的代码!

希望这是一个愚蠢的一线问题,如果你们想要更多的代码让我知道,我将编辑这篇文章。

更新继承了我忘记提及的代码,因为你可以看到我已经分配了数据成员

accCollection.DataSource = myTable;
accCollection.DisplayMember = "name";
accCollection.ValueMember = "keycode";

更新::::还有更多信息。 所选值应为1557,即名称帐号。 但我得到1855,这是一个不同的帐号。 就像我说数据表是正确的....这就是为什么我sooooooo困惑!

更新::下载一些代码,以便您可以看到我如何使用信息更新组合框!

SqlCommand accountFill = new SqlCommand("SELECT name, keycode FROM dbo.Customer", conn1);
SqlDataAdapter readacc = new SqlDataAdapter(accountFill);
DataTable dt = new DataTable();


readacc.Fill(dt);
dataGridView3.DataSource = dt;
conn1.Close();
accCollection.DataSource = dt;
accCollection.DisplayMember = "name";
accCollection.ValueMember = "keycode";

然后我将以下内容传递给我调用其他查询的任务。

private void button1_Click_1(object sender, EventArgs e)
{
    checkBox1.Checked = true;
    string acct = accCollection.SelectedValue.ToString();

    Task t = new Task(() => GetsalesFigures(acct));
    t.Start();
}

更新::只是为了显示我得到的数据! 在此输入图像描述

好的,所以在调试一些帮助之后,我已经使用了以下代码来获得这些结果。

var result = accCollection.SelectedValue;
if (result != null)
{
   MessageBox.Show(result.ToString());
}

这= 1885这是错的

但是,当我这样做。

DataRowView row = (DataRowView)accCollection.SelectedItem;
if (row != null)
{
   MessageBox.Show(row[0] + " " + row[1]);
}

它显示了正确的数据,“melksham”“1557”

为什么是这样?

您可以使用SelectedValueSelectedItem属性,但您还必须检查返回的值是否为null。

如果绑定DataTable,则SelectedItem属性将返回DataRowView。

DataRowView row = (DataRowView)accCollection.SelectedItem;
if(row!=null)
{
   MessageBox.Show(row[0] + " " + row[1]);
}

如果是SelectedValue,

var result = accCollection.SelectedValue;
if (result != null)
{
   MessageBox.Show(result.ToString()); 
}          

编辑:

Form_Load事件中的代码:

private void Form1_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("A1", typeof(int));
    dt.Columns.Add("A2");
    dt.Rows.Add(1, "A");
    dt.Rows.Add(2, "B");

    comboBox1.DataSource = dt;
    comboBox1.DisplayMember = "A2";
    comboBox1.ValueMember = "A1";
}

Button的Click处理程序中的代码:

var result = comboBox1.SelectedValue;
if (result != null)
{
   MessageBox.Show(result.ToString());
}


DataRowView row = (DataRowView)comboBox1.SelectedItem;
if (row != null)
{
   MessageBox.Show(row[0] + " " + row[1]);
}

好几件事:

  1. DisplayMember属性应该是要在组合框内显示的列的名称。
  2. ValueMember属性应该是列的名称,该列是项的值。

     accCollection.DisplayMember = "name"; accCollection.ValueMember = "key"; 

    如果您想要所选项目的值,您应该使用:

     string acct = accCollection.SelectedValue.ToString(); 

    获取显示文本为:

     string acct = accCollection.SelectedText; 

请参阅了解详情。

我创建了一个DataTable,我用来将dataTable绑定到组合框以显示标题类型,我想获得数据表中的标题id到变量。

      cmbTitle.DataSource=dataTable;
      cmbTitle.DisplayMember="title_type";
      cmbTitle.ValueMember="id";

然后在cmbtitle的选择更改事件中,我将选定的值成员转换为字符串并解析为整数以将其保存回数据库,因为它是外键。

  private void cmb_title_SelectedIndexChanged(object sender, EventArgs e)
  {
       string userTitle = cmb_title.SelectedValue.ToString();            
       int.TryParse(userTitle, out this.userTitle);
       MessageBox.Show(this.userTitle.ToString());            
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM