none
ComboBox数据绑定问题! RRS feed

  • 问题

  • school_idComboBox.DisplayMember = "school_name";
    school_idComboBox.ValueMember = "school_id";
    //school_idComboBox.SelectedValue = "school_id";
    school_idComboBox.DataSource = schoolInfoBindingSource;
    school_idComboBox.DataBindings.Add("Text", floorInfoBindingSource, "school_id", true, DataSourceUpdateMode.OnPropertyChanged);

    在floorInfo中 有个school_id项,和schoolInfo表的school_id对应。
    现在要提取floorInfo表中的school_id项 ,在界面希望显示schooInfo的School_name的项  也就是school_id对应的名称!
    我写了上面的代码,界面显示出来的还是ID得值  ? 各位指点下
    态度问题 不是智力问题 记着!
    2009年10月6日 8:09

答案

  • school_idComboBox.DataBindings.Add("SelectedValue", floorInfoBindingSource, "school_id", true, DataSourceUpdateMode.OnPropertyChanged);

    用这个~
    • 已标记为答案 溺水鱼 2009年10月8日 14:57
    2009年10月7日 14:20

全部回复

  • 试试
    1.
    school_idComboBox.DisplayMember = "school_name";
    school_idComboBox.ValueMember = "school_id";
    // school_idComboBox.SelectedValue = "school_id";
    school_idComboBox.DataSource = schoolInfoBindingSource;
    // school_idComboBox.DataBindings.Add("Text", floorInfoBindingSource, "school_id", true, DataSourceUpdateMode.OnPropertyChanged);

    2.
    school_idComboBox.DisplayMember = "school_name";
    school_idComboBox.ValueMember = "school_id";
    //school_idComboBox.SelectedValue = "school_id";
    school_idComboBox.DataSource = schoolInfoBindingSource;
    school_idComboBox.DataBindings.Add("Text", floorInfoBindingSource, "school_name", true, DataSourceUpdateMode.OnPropertyChanged);
    2009年10月6日 9:02
  • 都试了  没有用!


    态度问题 不是智力问题 记着!
    2009年10月6日 9:07
  • 你好 对于你这种情况可以采取几种方式:
    1,在查询的时候通过innerjoin将这两个表的数据连接成一个表这样就可以设置好DisplayMember,ValueMemeber后直接绑定
    2,将两个表的查询结果Table添加到一个DataSet中并且建立相应的关系,然后通过DataBindings来进行单独的绑定
    参考msdn的
    /* Create two Binding objects for the first two TextBox
       controls. The data-bound property for both controls
       is the Text property. The data source is a DataSet
       (ds). The data member is the navigation path:
       TableName.ColumnName. */
       textBox1.DataBindings.Add(new Binding
       ("Text", ds, "customers.custName"));
       textBox2.DataBindings.Add(new Binding
       ("Text", ds, "customers.custID"));
         
       /* Bind the DateTimePicker control by adding a new Binding.
       The data member of the DateTimePicker is a navigation path:
       TableName.RelationName.ColumnName. */
       DateTimePicker1.DataBindings.Add(new
       Binding("Value", ds, "customers.CustToOrders.OrderDate"));


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年10月7日 13:39
    版主
  • school_idComboBox.DataBindings.Add("SelectedValue", floorInfoBindingSource, "school_id", true, DataSourceUpdateMode.OnPropertyChanged);

    用这个~
    • 已标记为答案 溺水鱼 2009年10月8日 14:57
    2009年10月7日 14:20
  • 小弟在这里感谢了 ....确实是这样的
    有时间 可以帮理解下:DisplayMember、ValueMember、SelectedValue、之间的差别和关系吗!怎么不是绑定到Text属性上!
    态度问题 不是智力问题 记着!
    2009年10月8日 14:59
  • 貌似这方法可行 只不是对于我那个问题的 不过在此谢过了
    态度问题 不是智力问题 记着!
    2009年10月8日 15:00
  • 对于一些数据,一般在程序里会采用与显示值不一样的格式以利于处理。就像学校,我们看到的是学校名称,而程序里会用学校ID来进行处理。
    这里牵涉的问题就是如何在显示值与内在表示之间进行转换。
    ComboBox如下处理:
    将ComBoBox的数据源设置一个对象集合,将DisplayMember设置为对象中存储显示值的属性,将ValueMember设置为对象中存储内在值的属性。这样用户将看到一个显示值的列表,ComboBox.Text属性对应当前选中对象的显示值(并不完全如此,比如设置了格式化的话就会不同),ComboBox.SelectedValue对应当前选中对象的内在值。当用户在列表中选择一个显示值时,ComboBox.SelectedValue将被设置为与该显示值对应的内在值。如果在程序中指定了ComboBox.SelectedValue,在ComboBox中将会选中该值对应的显示值。

    在你的代码里,你把Text属性(显示值)绑定到了SchoolID(内在值)。

    原则上,Text、SelectedValue、SelectedItem都可以用来绑定当前选择项。对当前项进行绑定有一个明显的缺点就是:控件不会在用户更改选中项时即时回写绑定源,控件会在失去焦点时回写绑定源。如果需要在用户更改选中项时立即进行响应,则最好处理SelectedIndexChanged事件。
    2009年10月9日 13:46