cmb1.DataSource=dataSet1.Tables[0];
cmb1.DisplayMember="F_Name";
为何comboBox里显示的是System.Data.DataRowView;
谁能告诉我怎么回事?谢谢

解决方案 »

  1.   

    你的cmb1.DisplayMember字符可能有错误,确定是在Tables[0]中有的列才行.
    比如一个table有2列(c1,c2),则你想绑定第一列则
    cmb1.DisplayMember="c1";
    第二列则:cmb1.DisplayMember="c2";
    如果列名或列不存在,就是显示:System.Data.DataRowView.
      

  2.   

    没有错啊,我又检查了一下数据库中有F_Name这个字段
    而且我又换了几个字段试试也是这种情况
      

  3.   

    winform与webform区别很大的。传说有数据绑定可以。但是我试过不好使。
    我的做法时做一个类。
    public class ComboBoxItem
    {
    private string _text=null;
    private object _value=null;
    public string Text{get{return this._text;} set{this._text=value;}}
    public object Value{get {return this._value;} set{this._value=value;}}
    public override string ToString()
    {
    return this._text;
    }
    }然后绑定
    void BindLochus()
    {
    CMB_Lochus.Items.Clear();
    OracleConnection conn=new OracleConnection(oracledb);
    conn.Open();
    try
    {
    string sql=@"select Lochusid,Lochusname from Lochus where Departmentid="+((ComboBoxItem)CMB_Dep.SelectedItem).Value;
    OracleCommand cmd=new OracleCommand(sql,conn);
    OracleDataReader Reader=cmd.ExecuteReader();
    while (Reader.Read()) 
    {
    ComboBoxItem newItem = new ComboBoxItem();
    newItem.Text = Reader["Lochusname"].ToString();
    newItem.Value =Reader["Lochusid"].ToString();
    CMB_Lochus.Items.Add(newItem);
    }
    Reader.Close();
    }
    catch(Exception ex)
    {MessageBox.Show(ex.Message);}
    finally
    {
    conn.Close();
    }
    }
    使用时
    private void button1_Click(object sender, System.EventArgs e)
    {
    OracleConnection conn=new OracleConnection(oracledb);
    conn.Open();
    try
    {
    for (int i=0;i<LB_List.Items.Count;i++)
    {
    string sql=@"select  t.cbdw||'-'||t.re3 from tbeventcomplain t where t.tsbh='"+LB_List.Items[i].ToString()+"'";
    OracleCommand cmd=new OracleCommand(sql,conn);
    Object obj=cmd.ExecuteOracleScalar();
    if(obj.ToString()!="11-20")
    {
    string add=LB_List.Items[i].ToString()+"   "+obj.ToString()+"\r\n";
    textBox1.Text=textBox1.Text+add;
    }
    progressBar1.Value=i;
    }

    }
    catch(Exception ex)
    {MessageBox.Show(ex.Message);}
    finally
    {
    conn.Close();

    }
    MessageBox.Show("ok");
    }
      

  4.   

    调试一下,看看dataSet1.Tables[0]到底有些什么东西.
      

  5.   

    不是看你数据库中有没有这个字段
    而是看你的DataSourse里填充进去了没有
      

  6.   

    是啊,请先测试是否数据被填充进去,如果是自己定义的datatable ,那么是否有给它增加数据?
    如果都做了,那么应该可以显示出数据,winform程序没有那么吓人吧,就这个还写个类吗???
      

  7.   

    奇怪,调试的时候怎么显示的是:
    dataSet1.Tables[0] 错误:对象“dataSet1.Tables”没有索引器
    不知道是怎么回事,用dataGrid1.dataSource=dataSet1.Tables[0]怎么就能正确显示
      

  8.   

    cmb1.DataSource=dataSet1.Tables[0];
    cmb1.DisplayMember="F_Name";
    cmb1.ValueMember = "F_Name";
      

  9.   

    调试一下,看看dataSet1.Tables[0]到底有些什么东西.
    _____________________________________________________
    调试了,dataSet1.Tables[0]里面很多东西,不知道该看哪一个?
      

  10.   

    头痛啊,谁能告诉我啊?已经确定有这个字段了"F_Name"
      

  11.   

    你在窗体加载时,加fill一下
    像:
    private void Form1_Load(object sender, System.EventArgs e)
    {
    sqlDataAdapter1.Fill(dataSet11);

    }
      

  12.   

    楼上的,好像不用Fill就行,原因可能:
    1.SQL语句是否可以正常查询.
    2.没有DisplayMember,ValueMember是否已全部绑定到可用值.
      

  13.   

    用这种方法试试
    comboBox1.DisplayMember=ds.Tables[0].Columns[2].ColumnName;
      

  14.   

    windows下面:
    ComboBox1.DataSource = myDataSet ;//数据集
    ComboBox1.DisplayMember = "person.userId" ;//表名加字段名
    ComboBox1.ValueMember = "person.username" ;
    ==============
    this.ComboBox2.DataSource = myDataTable;//数据表
    this.ComboBox2.DisplayMember = "Name";字段名
      

  15.   

    你需要在formload 事件里加一句sqlDataAdapter1.Fill(dataSet11); 加上这一句就可以了
      

  16.   

    几种可能:1.datatable没数据2.没有哪一列(不仅仅是数据库)如果你 select a as b from c那么你就没有a列了,而是b列了
      

  17.   

    我也是同样的问题,我是这么解决的this.comboBox1.SelectedIndexChanged -= new System.EventHandler(this.comboBox1_SelectedIndexChanged);
      

  18.   

    因为在窗体加载时,好像是自动执行一下comboBox1_SelectedIndexChanged的,所以,我先给取消一下