C# winform listbox在load事件填充触发selectedIndexChanged事件问题

时间:2021-02-27 20:58:12
各位大神,我在窗口的load事件加入listbox填充代码,是不是会在窗口截入时就会触发listbox的selectedIndexChanged事件?因为现在我selectedindexchanged事件加入代码后,不能顺利执行,窗口载入时listbox的selectedItem的值是System.Data.DataRowView,这个怎么解决呀?
麻烦各位老师看看,下面是代码:
窗口截入代码:
private void form_yuangong_Load(object sender, EventArgs e)
        {
            Datebase db = new Datebase();
            string sql = "select * from shixinyuangong";
            lst_yuangongliebiao.DataSource = db.Query(sql);
            lst_yuangongliebiao.DisplayMember = "姓名";
        }


selectedindexchanged事件代码:
private void lst_yuangongliebiao_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            
            string selectname = lst_yuangongliebiao.SelectedItem.ToString();
            string sql = "select * from shixinyuangong where 姓名='" + selectname + "'";
            //txt_xinming.Text = selectname;
            Datebase db = new Datebase();
            DataTable dt = new DataTable();
            dt = db.Query(sql);
            txt_xinming.Text = dt.Rows[0]["姓名"].ToString();
            txt_bumeng.Text = dt.Rows[0]["部门"].ToString();
            txt_zhiwei.Text = dt.Rows[0]["职位"].ToString();
            txt_zaizhishijian.Text = dt.Rows[0]["入职时间"].ToString();
            txt_phone.Text = dt.Rows[0]["手机"].ToString();
            txt_qq.Text = dt.Rows[0]["QQ"].ToString();
            txt_mail.Text = dt.Rows[0]["mail"].ToString();

        }

异常:
C# winform listbox在load事件填充触发selectedIndexChanged事件问题

5 个解决方案

#1


提示很清楚,没有查询到记录,调试下。

#2


 string selectname = lst_yuangongliebiao.SelectedText


comboBox.SelectedItem: 这只是一个对象  
comboBox.SelectedText:表示组合框中当前选定文本的字符串
comboBox.SelectedValue:包含由   ValueMember   属性指定的数据源成员的值的对象。

#3


 string selectname = lst_yuangongliebiao.SelectedItem.ToString();
-》
看看你的 selectName是个什么东西?SelectedItem 表示绑定的对象,而不是一个字符串。可以换成Text

#4


string selectname = lst_yuangongliebiao.SelectedItem. Text.ToString();
你应该获取选择项的文本,而不是选择项的类型

#5


  我看了,是有这样的问题,原因是你在给LISTBOX设置数据源和绑定的时候会触发SelectedIndexChanged事件,你可以设置一个全局布尔变量  在页面LOAD完之后再赋值TRUE  然后在事件里面判断 是TRUE再执行。。

       private void Form1_Load(object sender, EventArgs e)
        {
           DataTable dt=new System.Data.DataTable();
           dt.Columns.Add("ID",Type.GetType("System.Int32"));
           dt.Columns.Add("name",Type.GetType("System.String"));
         
           for(int i=0;i<10;i++)
           {
           DataRow dr=dt.NewRow();
           dr["ID"]=i;
           dr["name"]="这是"+i;
           dt.Rows.Add(dr);
           }
           this.listBox1.DataSource = dt;
           this.listBox1.ValueMember = "ID";
           this.listBox1.DisplayMember = "name";
           temp = true;
            //this.listBox1.Items.Add("test1");

            //this.listBox1.Items.Add("test2");

            //this.listBox1.Items.Add("test3");
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(temp)
            MessageBox.Show("选择的是:" + listBox1.Text + ",位列第" + listBox1.SelectedIndex.ToString(), "信息提示");
        }

#1


提示很清楚,没有查询到记录,调试下。

#2


 string selectname = lst_yuangongliebiao.SelectedText


comboBox.SelectedItem: 这只是一个对象  
comboBox.SelectedText:表示组合框中当前选定文本的字符串
comboBox.SelectedValue:包含由   ValueMember   属性指定的数据源成员的值的对象。

#3


 string selectname = lst_yuangongliebiao.SelectedItem.ToString();
-》
看看你的 selectName是个什么东西?SelectedItem 表示绑定的对象,而不是一个字符串。可以换成Text

#4


string selectname = lst_yuangongliebiao.SelectedItem. Text.ToString();
你应该获取选择项的文本,而不是选择项的类型

#5


  我看了,是有这样的问题,原因是你在给LISTBOX设置数据源和绑定的时候会触发SelectedIndexChanged事件,你可以设置一个全局布尔变量  在页面LOAD完之后再赋值TRUE  然后在事件里面判断 是TRUE再执行。。

       private void Form1_Load(object sender, EventArgs e)
        {
           DataTable dt=new System.Data.DataTable();
           dt.Columns.Add("ID",Type.GetType("System.Int32"));
           dt.Columns.Add("name",Type.GetType("System.String"));
         
           for(int i=0;i<10;i++)
           {
           DataRow dr=dt.NewRow();
           dr["ID"]=i;
           dr["name"]="这是"+i;
           dt.Rows.Add(dr);
           }
           this.listBox1.DataSource = dt;
           this.listBox1.ValueMember = "ID";
           this.listBox1.DisplayMember = "name";
           temp = true;
            //this.listBox1.Items.Add("test1");

            //this.listBox1.Items.Add("test2");

            //this.listBox1.Items.Add("test3");
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(temp)
            MessageBox.Show("选择的是:" + listBox1.Text + ",位列第" + listBox1.SelectedIndex.ToString(), "信息提示");
        }