读书人

怎么在dataGridView里设置两个列的一个

发布时间: 2012-01-11 22:28:46 作者: rapoo

如何在dataGridView里设置两个列的一个二级联动效果。

我想实现当我改变了公司后,部门那一列的选项也跟真改变。
这个dataGridView 是绑定的userBindingSource
公司这列的DataGridViewComboBoxColumn 是绑定的CoBindingSource
部门这列的DataGridViewComboBoxColumn 绑定的是deptBindingSource
上面这些都是用vs2005自动生成的代码做的。
然后给dataGridView 添加了个监听。当公司这列的某个单元格的值发生改变时触发一个事件。
事件代码如下:

try
{
Point a = dataGridView1.CurrentCellAddress;
int values = (int)this.dataGridView1.Rows[a.X].Cells[1].Value;
this.deptTableAdapter.FillBy(this.dataSet.dept, values);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
结果就是
请各位指点下

[解决办法]
提示那个 肯定是你绑定的问题

下面是我绑定的代码 希望对你有帮助

C# code
            // 构建表格实际数据源            DataTable dt = new DataTable();            dt.Columns.Add("c_ID");            dt.Columns.Add("d_ID");            for (int i = 0; i < 10; i += 2)                dt.Rows.Add(new object[] { i, i % 4 });            dataGridView1.DataSource = dt;            //先构建第一个联动数据列            DataTable dt1 = new DataTable();            dt1.Columns.Add("c_ID");            dt1.Columns.Add("c_name");            for (int i = 0; i < 10; i++)                dt1.Rows.Add(new object[] { i, "公司" + i.ToString() });            //建立下拉列           DataGridViewComboBoxColumn cc = new DataGridViewComboBoxColumn();           cc.DataSource = dt1;           cc.HeaderText = "公司名称";           cc.DisplayMember = "c_name";           cc.ValueMember = "c_ID";           cc.DataPropertyName = "c_ID";           dataGridView1.Columns.Add ( cc);           //构建第二个级联动数据列           DataTable dt2 = new DataTable();           dt2.Columns.Add("d_ID");           dt2.Columns.Add("d_name");           for (int i = 0; i < 4; i++)               dt2.Rows.Add(new object[] { i, "部门" + i.ToString() });           //建立下拉列           DataGridViewComboBoxColumn c2 = new DataGridViewComboBoxColumn();           c2.DataSource = dt2;           c2.HeaderText = "部门";           c2.DisplayMember = "d_name";           c2.ValueMember = "d_ID";           c2.DataPropertyName = "d_ID";           dataGridView1.Columns.Add( c2);            //最后隐藏ID列           dataGridView1.Columns[0].Visible = false;           dataGridView1.Columns[1].Visible = false;
[解决办法]
给公司这一列的ComboBox添加事件,我一般是这么做的~
C# code
dataGridView.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView_EditingControlShowing);        private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)        {            if (dataGridView.CurrentCell.OwningColumn.Name.Equals("公司") && e.Control is ComboBox)            {                (e.Control as ComboBox).SelectedValueChanged -= new EventHandler(ComboBox_SelectedValueChanged);                (e.Control as ComboBox).SelectedValueChanged += new EventHandler(ComboBox_SelectedValueChanged);            }        }        void ComboBox_SelectedValueChanged(object sender, EventArgs e)        {            if ((sender as ComboBox).SelectedItem != null)            {                dataGridView.CurrentRow.Cells["部门"].Value = ((sender as ComboBox).SelectedItem as DataRowView)["部门"];            }        } 

读书人网 >C#

热点推荐