1

如何获取列表框的选定项的值?

我试过这样的事情:

            foreach (var item in combo_course_op.SelectedItems)
            {
                string s = "select cid from tms_course where course_title = '" + item.ToString() + "'";
            }

但它不起作用..它将字符串s显示为“从tms_course中选择cid where course_title ='System.Data.DataRowView'”

我在哪里做错了?

这就是我数据绑定的方式:

MyCommand = new OdbcCommand("select distinct module_name from tms_class_schedule where class_date ='"+selectedDate+"'", DBConnect.MyConnection);
            dap = new OdbcDataAdapter(MyCommand);
            DS = new DataSet();
            dap.SelectCommand = MyCommand;
            dap.Fill(DS);
            combo_course_op.DataContext = DS.Tables[0].DefaultView;
            combo_course_op.DisplayMemberPath = DS.Tables[0].Columns["module_name"].ToString();
4

4 回答 4

2

显然,您的列表框绑定到某个数据源。这意味着列表框中的项目不是字符串,而是DataRowView. 您可以像这样转换并获取基础数据对象:

DataRowView drv = (DataRowView)item;
<TheRealType> itemOfMyType = (<TheRealType>)drv.Row;

其中<TheRealType>是绑定到列表框的项目的实际数据类型。

于 2012-11-26T12:29:44.453 回答
1
foreach (var item in combo_course_op.SelectedItems)
{
    string s = "select cid from tms_course where course_title = '" 
             + (item["Title"] as string) + "'"; // if Title is column name. Otherwise replace "Title" with actual column header name
}
于 2012-11-26T12:31:41.807 回答
1

在您的代码中,DisplayMemberPath 设置为 Columns["module_name"]

由此推断,以下应该有效:

foreach (var item in combo_course_op.SelectedItems)
{
   string s = "select cid from tms_course where course_title = '" + item["module_name"].ToString() + "'";
}

所选项目是 DataRow,因此您必须获取正确的列才能返回值。

于 2012-11-28T19:41:29.410 回答
-1

您可以将Item其转换为真实类型:

        foreach (var item in combo_course_op.SelectedItems)
        {
            string s = "select cid from tms_course where course_title = '" +
               ((Course)item).Title + "'";
        }

或覆盖Course.ToString,使其返回其标题。

编辑(在注意到之后DataRowView

将 DataRowViews 放入 WPF ComboBox 看起来像一个非常糟糕的 id。也许您应该阅读一两个关于 WPF 和 MVVM 的教程。

于 2012-11-26T12:28:24.520 回答