我有一个组合框,使用以下代码
来访问数据库中的数据public void BindComboBox(ComboBox ComboBoxOrg)
{
con.Open();
orgload = new OleDbCommand("SELECT organization_id, short_name FROM organization", con);
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = orgload;
DataSet ds = new DataSet();
da.Fill(ds);
ComboBoxOrg.ItemsSource = ds.Tables[0].DefaultView;
ComboBoxOrg.DisplayMemberPath = ds.Tables[0].Columns["short_name"].ToString();
ComboBoxOrg.SelectedValuePath = ds.Tables[0].Columns["organization_id"].ToString();
con.Close();
}
XAML UI代码是
<ComboBox x:Name="ComboBoxOrg"
Width="308"
Height="40"
HorizontalAlignment="Left"
VerticalAlignment="Top"
FontSize="18"
Margin="0,0,0,100" Foreground="#FF666666"
ItemsSource="{Binding}"/>
我想获取SELECTED ITEM然后用它来查询其id存在的表(用户),例如。
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source = C:\hcsshare\hcsshare.accdb; Persist Security Info=False");
cmd = new OleDbCommand("SELECT short_name FROM organization WHERE short_name='" + SELECTED_ITEM + "'", con);
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = cmd;
DataSet dataSet = new DataSet();
adapter.Fill(dataSet);
if (dataSet.Tables[0].Rows.Count > 0)
{
}
组合框填充得很好,那么如何从组合框中获取SELECTED_ITEM呢?
答案 0 :(得分:1)
你可以这样做:
string value =ComboBoxOrg.SelectedItem.Text();
或
string Value="";
if(ComboBoxOrg.SelectedIndex>=0)
Value=((ComboBoxItem)ComboBoxOrg.SelectedItem).Content.ToString();
答案 1 :(得分:0)
您的SelectedValuePath是organization_id,而您使用selectedValue与short_name匹配,将查询条件更改为WHERE organization_id = selected_value_of_combobox。
试试这个,没有经过测试,但绝对可以帮到你:
DataSet dataSet = new DataSet();
using (OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source = C:\hcsshare\hcsshare.accdb; Persist Security Info=False"))
{
con.Open();
OleDbCommand cmd = new OleDbCommand("SELECT short_name FROM organization WHERE organization_id=?", con);
cmd.Parameters.Add("?", ComboBoxOrg.SelectedValue);
using (var adapter = new OleDbDataAdapter(cmd))
{
adapter.Fill(data);
}
}
if (dataSet.Tables[0].Rows.Count > 0)
{
//your code goes....
}
或者,如果您确实需要将selectedValue与short_name匹配,
使用此查询:
SELECT short_name FROM organization WHERE short_name=?
并将其添加为参数:
cmd.Parameters.Add("?", ((ComboBoxItem)ComboBoxOrg.SelectedItem).Content.ToString());
了解更多here。
答案 2 :(得分:0)
所以当我在 post_id | date | status
-----------+-------------+---------
3 | 2016-09-01 | null
3 | 2016-09-02 | 1
3 | 2016-09-03 | 1
3 | 2016-09-04 | 2
3 | 2016-09-05 | 2
6 | 2016-09-01 | null
6 | 2016-09-02 | null
6 | 2016-09-03 | 1
6 | 2016-09-04 | 2
6 | 2016-09-05 | 2
的框上有一个事件处理程序时,我发现这些方法都没有工作,除非我这样做:
SelectionChanged
它很难看,但这是我能在这个功能中获得价值的唯一方法。另一个选项是,如果您使用private void MyBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cbx = sender as ComboBox;
string myValue = ((DataRowView)cbx.Items.GetItemAt(cbx.SelectedIndex))).Row.ItemArray[0].ToString();
}
执行DropDownClosed
,则可以直接获取该框的EventArgs e
。我相信这是因为.Text
事件在实际设置文本之前会触发,所以你必须回到&#34;手动&#34;获取所选索引处的项目,而如果在框关闭后执行此操作,则已设置该值。这是一个关键概念,对许多人来说可能是次要的,但对其他人来说并不明显。