C#winfrom里的按钮Click事件里查询一个字段显示在ListBox里面,在点击listbox里的选中的值传到文本框中。
出现在查询的时候,数据显示在listbox里。同时也在textbox里显示了System.Data.DataView 这么一行。
代码: 
      private void BtnSearch_Click(object sender, EventArgs e)
        {
            WebReference.Service1 serv = new SmartWMS.WebReference.Service1();
            serv.Url = "http://" + str_ip + "/" + str_ser + "/Service1.asmx";
            DataSet ds = serv.NO();
            ListB.DataSource = ds.Tables[0];
            ListB.DisplayMember = ds.Tables[0].Columns[0].ToString();
            ListB.ValueMember = ds.Tables[0].Columns[0].ToString();        }      private void ListB_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ListB.SelectedItem != null)
            {
                txtNo.Text = Convert.ToString(ListB.SelectedValue);
            }
        }就写了这么一段代码。

解决方案 »

  1.   

    txtNo.DataBindings.Add("Text",ds.Tables[0],"字段名");在按钮的Click事件中,对ListBox完成绑定之后,加上这样的语句。
      

  2.   

    这个效果是把第一条数据显示在文本框里,点击listbox显示其他的数据。
    我要的效果是,查询后文本框是空的,只有选择了listbox里的行,才将数据显示到文本框中。
      

  3.   

                ListB.DisplayMember = ds.Tables[0].Columns[0].ToString();
                ListB.ValueMember = ds.Tables[0].Columns[0].ToString();--------------------------------------------
    如果是这样的话,在你原来的代码中,改一下绑定的代码:            ListB.DisplayMember = ds.Tables[0].Columns[0].ColumnName;
                ListB.ValueMember = ds.Tables[0].Columns[0].ColumnName;
      

  4.   

    不是出错,是数据显示的问题。在按了查询后,文本框内出现了System.Data.DataRowView的这个文字。
    呵呵。又仔细查了下是绑定了dataset的方法问题,我在试下芥子兄的代码看看。
      

  5.   

    textBox1.Text = listBox1.Items[listBox1.SelectedIndex].ToString();用这个样式吧!我在listBox的Items集合中直接添加了 项。
      

  6.   

    if (ListB.SelectedItem != null)
                {
                    txtNo.Text = Convert.ToString(ListB.SelectedItem.ToString());
                }
      

  7.   

    呵呵。楼上几位的方法试了下还是有这样的情况啊。
    芥子兄一楼的方法至少不显示System.Data.DataRowView这个值在文本框中了。直接显示第一行数据了。
    呵呵
      

  8.   

    明白了,这样试一下吧。在你把数据绑定到列表框的时候.private void BtnSearch_Click(object sender, EventArgs e)
            {
                WebReference.Service1 serv = new SmartWMS.WebReference.Service1();
                serv.Url = "http://" + str_ip + "/" + str_ser + "/Service1.asmx";
                DataSet ds = serv.NO();
                ListB.DataSource = ds.Tables[0];
                //ListB.DisplayMember = ds.Tables[0].Columns[0].ToString();
                //ListB.ValueMember = ds.Tables[0].Columns[0].ToString();

                for (int count = 0; count < ds.Tables[0].Rows.Count; count++)
                {
                    ListB.Items.Add(ds.Tables[0].Rows[count]["要绑定的列字段"].ToString());
                }

            }这样联动就没有问题了!
      

  9.   

    芥子兄,4楼的也试过了,也是如一楼的效果,查询后文本框就显示第一行数据了。
    libinguest兄的方法我这报错的。找不到绑定的数据?
    呵呵。不会是Rows在Listbox里有问题?我在改下。
      

  10.   

    那么,只有从数据源中取值了:      private void ListB_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (ListB.SelectedItem != null)
                {
                    DataRowView drv=ListB.SelectedValue as DataRowView;
                    if(drv!=null)
                       txtNo.Text=drv.Row[0].ToString();
                }
            }
      

  11.   

    芥子兄,费心了。测试下还是一个样,如果单单加了ListB_SelectedIndexChanged,选择其他行文本框的内容不变的,
    这个不好意思!忘了提下了。这个是在symbol的扫描枪mobile上弄的程序。
    呵呵,不知道会不会有点不一样,阉割过的控件。
      

  12.   

    我忽然有个想法:咱不用ToString了,咱直接在前面加上(string)。
      

  13.   

    不明白芥子兄的想法,这个问题现在又开始困扰我了。
    现在舍弃了Listbox,用Combobox和TextBox的联动也碰到了相同的问题了。让我很迷茫。