Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从由access数据库中的数据填充的WPF组合框中获取选定项_C#_Wpf_Windows_Xaml_Ms Access - Fatal编程技术网

C# 从由access数据库中的数据填充的WPF组合框中获取选定项

C# 从由access数据库中的数据填充的WPF组合框中获取选定项,c#,wpf,windows,xaml,ms-access,C#,Wpf,Windows,Xaml,Ms Access,我有一个组合框,它由access数据库中的数据填充,使用以下代码 public void BindComboBox(ComboBox ComboBoxOrg) { con.Open(); orgload = new OleDbCommand("SELECT organization_id, short_name FROM organization", con); OleDbDataAdapter da = new OleDbDataAdapter(); da.Se

我有一个组合框,它由access数据库中的数据填充,使用以下代码

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}"/>      

组合框填充得很好,因此如何从组合框中获取所选的项目?

您可以通过以下方式简单地完成:

string value =ComboBoxOrg.SelectedItem.Text();


您的SelectedValuePath是organization\u id,而您正在使用selectedValue与简短的\u名称匹配,请将查询条件更改为其中organization\u id=selected\u value\u of \u 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与短名称匹配

使用此查询:

SELECT short_name FROM organization WHERE short_name=?
并将其添加为参数:

cmd.Parameters.Add("?", ((ComboBoxItem)ComboBoxOrg.SelectedItem).Content.ToString());

阅读更多。

因此,当我的
选择框中的事件处理程序发生更改时,我发现这些方法都不起作用,除非我这样做:

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();
}

这很难看,但这是我在这个函数中得到值的唯一方法。另一个选项是,如果使用
EventArgs e
执行
DropDownClosed
,则可以直接获取框的
.Text
。我认为这是因为
SelectionChanged
事件在实际设置文本之前触发,因此您必须“手动”返回以获取所选索引中的项目,而如果在框关闭后执行此操作,则已设置值。这是一个关键概念,可能是许多人的第二天性,但对其他人来说并不明显。

谢谢@jomsk1e我真的需要知道SelectedItem、SelectedValue和SelectedValuePath之间的区别这对我帮助很大。我设法使用字符串selectedorg=comboxorg.Text获取所选值;现在,我试图从organization表中获取组织id,然后在成功登录之前将其与users表中的组织id进行比较。我将感谢您在这方面的帮助。感谢您的回答@Ehsan Sajjad我尝试使用您的示例,但遇到了一个错误“无法将源类型“object”转换为目标类型“string”。为了解决这个问题,我必须将所选值转换为string(即(string)组合框。SelectedValue)但在运行期间,我还是遇到了另一个错误,谢谢你的回答,我使用了string selectedorg=comboxorg.Text;它工作得很好。不客气。我在我的答案中进行了编辑,这样它就可以帮助其他人解决同样的问题Comboboxorg.Text返回了SelectedItem文本??是的,它确实返回了SelectedItem文本。我正在使用WPF。好的,我编辑了我的答案,这样,如果有人寻求帮助,其他人会正确地得到答案
cmd.Parameters.Add("?", ((ComboBoxItem)ComboBoxOrg.SelectedItem).Content.ToString());
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();
}