ComboBox显示成员/值成员

时间:2013-09-02 12:06:15

标签: c# wpf combobox

我有一个对应于数据网格的combox框,当我选择一个带有所选索引的值更改函数时,数据网格会反映这一点。

问题:组合框当前显示如下信息

          Sep  2 2013  1:54PM
          Sep  2 2013  1:55PM
          Sep  3 2013  1:54PM

我想要的是:我希望组合框保持相同的功能,例如当我选择与数据网格交互的值时,但我希望它只显示一个DISTINCT日期,例如组合框应该显示:

             Sep 2 2013
             Sep 3 2013 etc 

任何人都有任何想法如何做到这一点?我是c#和wpf的新手所以不确定如何

3 个答案:

答案 0 :(得分:1)

您可以使用linq来限制数据并将其绑定到数据网格。

我不知道您的数据是什么样的,但如果它是一个列表或字符串数​​组,您可以这样做。

//this gets the first 11 characters of the date, you may have to change it slightly for days that have 2 digits but this is just an example, it then makes a distinct list.
dropdown.DataSource = data.Select(s=>s.SubString(0,11)).Distinct();

datagrid.DataSource = data.Where(w=> w.StartsWith(dropdown.SelectedValue));

可能有更好的方法,但这可能会有所帮助。如果您还没有使用它们,则可能必须添加using语句。 System.Collections.Generic和System.Linq

记得重新开始。

答案 1 :(得分:0)

为此,您需要在绑定到数据网格之前过滤掉绑定源。

答案 2 :(得分:0)

DataTable dt = new DataTable();

            SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=testing;Userid=abc;pwd=abc");

            SqlCommand cmd = new SqlCommand("select ID,date from tbl_test",con);

            con.Open();

            sqldatareader drw = cmd.ExecuteReader();

            dt.Load(drw);       

            DataRow dr = dt.NewRow();

            dr["id"] = "0";

            dr["date"] = "Select date";

            dt.Rows.InsertAt(dr, 0);

            cmb_test.DataSource = dt;

            cmb_test.DisplayMember = "date";

            cmb_test.ValueMember = "id";

            cmb_test.SelectedIndex = 0; 

           selected changed event change code:

           sqlcommand cmd = new sqlcommand("select ID,date from tbl_test where  id="+cmb_test_send.SelectedValue+",con);

            con.Open();

            sqldatareader drw = cmd.ExecuteReader();

            dt.Load(drw);

            sample_datagridview.DataSource=dt;   `