2012-11-26 73 views
1

如何获取列表框中所选项目的值?WPF Listbox SelectedItems

我想是这样的:

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

但它不works..it显示字符串s为“选择tms_course其中COURSE_TITLE = 'System.Data.DataRowView' CID”

我在哪里做错了?

这是我的数据怎么绑定:

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

回答

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 
} 
+0

我试过了,但还没有运气;我编辑了这个问题,请查看 – iJay

+0

您是如何收到物品的。 (即combo_course_op.SelectedItems类型) – Tilak

+0

嗨tilak, 我将列表框更改为列表视图。我认为我的数据绑定方法有一些错误。 列表 moduleNames = new List (); (MyReader.Read()) while(MyReader.Read()) { moduleNames.Add(MyReader.GetString(0)); } combo_course_op.ItemsSource = moduleNames; 现在你的方法很好... :) – iJay

-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组合框看起来像一个非常糟糕的ID。也许你应该阅读一两个关于WPF和MVVM的教程。

+0

事实上,将'DataRowView'放入WPF列表框是列表框数据绑定时.NET框架的默认行为。 –

2

显然你的列表框被绑定到某个数据源。这意味着列表框中的项目不是字符串,而是DataRowView的实例。你可以施放和得到的是底层的数据对象:

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

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

1

在你的代码中的DisplayMemberPath设置成列[ “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,所以你必须得到要返回的值的右列。

+0

你建议同样的Tilak ..:D谢谢 – iJay

+0

没有选择,还没有评论呢。你有module_name作为列,他使用Title ...不确定是否会导致你的问题。只有49分,所以不能回复评论和问。 – Zadam

+0

Y?不要..在他的文章中他提到了Title是什么。 无论如何感谢:D祝你好运 – iJay