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

三碗猪脚 2015-10-28 09:32:56





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,确实想不通是什么原因造成了
...全文
279 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
三碗猪脚 2015-11-12
  • 打赏
  • 举报
回复
问题没有解决,我最后采用了多个TAB的方式解决,下次再弄吧,每个人给了一点分,感谢大家的参与!

三碗猪脚 2015-10-31
  • 打赏
  • 举报
回复
引用 7 楼 andywangguanxi 的回复:
搞不懂为什么要把“页面上有一个combox cbxUseTable”的事件注册到GirdView里面ComboBox列的ComboBox上?想让GirdView里面的ComboBox改变值的时候不引起GridView重新绑定,那就给他一个新的事件,该事件里不写GirdView绑定的代码
我确实没有将“combox cbxUseTable”的事件注册到GirdView里面ComboBox列的ComboBox上“,这个两者之间是使用的同一个数据表,且数据表一直不更新
三碗猪脚 2015-10-28
  • 打赏
  • 举报
回复
引用 3 楼 aoye6202 的回复:
private void cbxUserTable_SelectedIndexChanged(object sender, EventArgs e) { BindUserTable(); } 不想刷新页面 就去掉 combox的 这个change事件
我是窗体程序,不是web程序,两者是一样的吗
三碗猪脚 2015-10-28
  • 打赏
  • 举报
回复
引用 4 楼 aoye6202 的回复:
[quote=引用 2 楼 rovecat 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 没有太明白 楼主的意思。 private void cbxUserTable_SelectedIndexChanged(object sender, EventArgs e) { BindUserTable(); } 这个事件,本来就是改变 Combobox的选项后,触发的事件。 就像 button的 click事件一样,你点击了 也会触发 button_click事件。 有什么问题吗?
页面上的combox改变选择后,grid要重新绑定的,改变表格内容[/quote] 你的问题就没有描述清楚,你是不想combox更新后重新绑定列表,还是combox更新后绑定的列表数据没有变化[/quote] 页面上有一个combox cbxUseTable,当这个控件改变时,引起grid重新绑定, grid中一个combox列,列中的单元格combox改变时,我想引起grid另一列的单元格内容的变化,但整个grid不能重新绑定, 现在问题是,当这个单元格中的combox改变时,结果调用了最上面的combox cbxUseTable 这个控件的cbxUserTable_SelectedIndexChanged,整个grid也重新绑定了,
aoye6202 2015-10-28
  • 打赏
  • 举报
回复
引用 2 楼 rovecat 的回复:
[quote=引用 1 楼 hanjun0612 的回复:] 没有太明白 楼主的意思。 private void cbxUserTable_SelectedIndexChanged(object sender, EventArgs e) { BindUserTable(); } 这个事件,本来就是改变 Combobox的选项后,触发的事件。 就像 button的 click事件一样,你点击了 也会触发 button_click事件。 有什么问题吗?
页面上的combox改变选择后,grid要重新绑定的,改变表格内容[/quote] 你的问题就没有描述清楚,你是不想combox更新后重新绑定列表,还是combox更新后绑定的列表数据没有变化
aoye6202 2015-10-28
  • 打赏
  • 举报
回复
private void cbxUserTable_SelectedIndexChanged(object sender, EventArgs e) { BindUserTable(); } 不想刷新页面 就去掉 combox的 这个change事件
三碗猪脚 2015-10-28
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
没有太明白 楼主的意思。 private void cbxUserTable_SelectedIndexChanged(object sender, EventArgs e) { BindUserTable(); } 这个事件,本来就是改变 Combobox的选项后,触发的事件。 就像 button的 click事件一样,你点击了 也会触发 button_click事件。 有什么问题吗?
页面上的combox改变选择后,grid要重新绑定的,改变表格内容
正怒月神 2015-10-28
  • 打赏
  • 举报
回复
没有太明白 楼主的意思。 private void cbxUserTable_SelectedIndexChanged(object sender, EventArgs e) { BindUserTable(); } 这个事件,本来就是改变 Combobox的选项后,触发的事件。 就像 button的 click事件一样,你点击了 也会触发 button_click事件。 有什么问题吗?
EdsionWang 2015-10-28
  • 打赏
  • 举报
回复
搞不懂为什么要把“页面上有一个combox cbxUseTable”的事件注册到GirdView里面ComboBox列的ComboBox上?想让GirdView里面的ComboBox改变值的时候不引起GridView重新绑定,那就给他一个新的事件,该事件里不写GirdView绑定的代码

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧