当前位置: 代码迷 >> C# >> winform中,datagridview中的combox抉择改变引起其它控件联动的原因
  详细解决方案

winform中,datagridview中的combox抉择改变引起其它控件联动的原因

热度:440   发布时间:2016-04-28 08:34:12.0
winform中,datagridview中的combox选择改变引起其它控件联动的原因





using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar.Controls;
namespace StarCoder
{
    public partial class CreateWeb : Form
    {
        MainForm MF;
        DataTable dtUserTable;
        public CreateWeb(MainForm M)
        {
            this.Text = Program.Name;
            MF = M;
            InitializeComponent();
        }

        private void CreateWeb_Load(object sender, EventArgs e)
        {
            this.Name = Program.Name;
            this.dataGridViewX1.AutoGenerateColumns = false;
            this.dataGridViewX1.AllowUserToAddRows = false;
            dtUserTable = MF.GetUserTables();
            this.cbxUserTable.DataSource = dtUserTable;
            dtUserTable.Columns.Add(new DataColumn("nameAndComment"));
            foreach (DataRow dr in dtUserTable.Rows)
            {
                dr["nameAndComment"] = dr["name"].ToString() + "(" + dr["comment"].ToString() + ")";
            }
            this.cbxUserTable.DisplayMember = "nameAndComment";
            this.cbxUserTable.ValueMember = "name";
            BindUserTable();
        }

        void BindUserTable()
        {
            this.dataGridViewX1.DataSource = null;
            string tb = this.cbxUserTable.SelectedValue.ToString();
            DataTable dt = MF.GetTableColumnsInfo(MF.DataBase, tb);
            this.dataGridViewX1.DataSource = dt;
        }

        private void cbxUserTable_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindUserTable();
         
        }

        private void dataGridViewX1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            DataGridViewComboBoxExColumn cbxCol = this.dataGridViewX1.Columns[5] as DataGridViewComboBoxExColumn;
            cbxCol.DataSource = dtUserTable;
            cbxCol.DisplayMember = "nameAndComment";
            cbxCol.ValueMember = "name";
            BindControlType();
        }

        private void pbox_Click(object sender, EventArgs e)
        {
            this.Hide();
            MF.Show();
        }

        public void BindControlType()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("id"));
            dt.Columns.Add(new DataColumn("name"));
            DataRow dr = dt.NewRow();
            dr[0] = "lbl";
            dr[1] = "标签";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = "rbx";
            dr[1] = "单选框";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = "cbx";
            dr[1] = "复选框";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = "ddl";
            dr[1] = "下拉列表";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = "txt";
            dr[1] = "密码输入";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = "txt";
            dr[1] = "单行文本框";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = "txt";
            dr[1] = "多行文本框";
            dt.Rows.Add(dr);
            DataGridViewComboBoxExColumn cbxCol = this.dataGridViewX1.Columns[4] as DataGridViewComboBoxExColumn;
            cbxCol.DataSource = dt;
            cbxCol.DisplayMember = "name";
            cbxCol.ValueMember = "id";
        }

    }
}



也就是单击grid中的数据源列的combox控件会调用       cbxUserTable_SelectedIndexChanged,确实想不通是什么原因造成了

------解决思路----------------------
没有太明白 楼主的意思。
private void cbxUserTable_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindUserTable();
          
        }
这个事件,本来就是改变  Combobox的选项后,触发的事件。
就像  button的 click事件一样,你点击了 也会触发 button_click事件。
有什么问题吗?
------解决思路----------------------
private void cbxUserTable_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindUserTable();
          
        }

不想刷新页面 就去掉 combox的 这个change事件
------解决思路----------------------
引用:
Quote: 引用:

没有太明白 楼主的意思。
private void cbxUserTable_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindUserTable();
          
        }
这个事件,本来就是改变  Combobox的选项后,触发的事件。
就像  button的 click事件一样,你点击了 也会触发 button_click事件。
有什么问题吗?



页面上的combox改变选择后,grid要重新绑定的,改变表格内容


你的问题就没有描述清楚,你是不想combox更新后重新绑定列表,还是combox更新后绑定的列表数据没有变化
------解决思路----------------------
搞不懂为什么要把“页面上有一个combox  cbxUseTable”的事件注册到GirdView里面ComboBox列的ComboBox上?想让GirdView里面的ComboBox改变值的时候不引起GridView重新绑定,那就给他一个新的事件,该事件里不写GirdView绑定的代码
  相关解决方案