DataGridView的单元格内容即时更新方法
2012-07-05 10:48
316 查看
DataGridView的即时更新方法 收藏
最近用了DataGridView,深有体会,最深刻一点是它的事件。我想很多人都希望编辑表格单元的同时更新其他东西,就好像TextBox的TextChanged事件,但DataGridView却没有提供类似TextChanged那样的事件。我想用下面的一个例子说明如何达到实时更新的效果。
上面的Form有一个DataGridView实例dataGridView1和一个Label实例label1。dataGridView1有3个字段,分别是班级(DataGridViewComboBoxColumn)、姓名(DataGridViewTextBoxColumn)和成绩(DataGridViewTextBoxColumn)。
现在要实现一个效果,就是如果更改了dataGridView1中任意一个cell(单元格)的值,label1的text就更新为那个cell的值。代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.dataGridView1.EditingControlShowing +=
new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
}
//编辑cell时激发的事件
void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control.GetType().Equals(typeof(DataGridViewComboBoxEditingControl)))//cell为类ComboBox时
{
e.CellStyle.BackColor = Color.FromName("window");
DataGridViewComboBoxEditingControl editingControl = e.Control as DataGridViewComboBoxEditingControl;
editingControl.SelectedIndexChanged += new EventHandler(editingControl_SelectedIndexChanged);
}
else if (e.Control.GetType().Equals(typeof(DataGridViewTextBoxEditingControl)))//cell为类TextBox时
{
e.CellStyle.BackColor = Color.FromName("window");
DataGridViewTextBoxEditingControl editingControl = e.Control as DataGridViewTextBoxEditingControl;
editingControl.TextChanged += new EventHandler(editingControl_TextChanged);
}
}
//TextBox的TextChanged事件
void editingControl_TextChanged(object sender, EventArgs e)
{
this.label1.Text = dataGridView1.CurrentCell.EditedFormattedValue.ToString();
}
//Combox的SelectedIndexChanged事件
void editingControl_SelectedIndexChanged(object sender, EventArgs e)
{
this.label1.Text = dataGridView1.CurrentCell.EditedFormattedValue.ToString();
}
}
有几点要说明的
1. EditingControlShowing 是DataGridView自带的事件,当某个cell被编辑时就会激发该事件。接着就到了dataGridView1_EditingControlShowing 函数,然后(if…else if…)判断那个cell是DataGridViewComboBoxEditingControl还是DataGridViewTextBoxEditingControl 控件类型。判断好控件类型之后就可以用该类型自带的事件,例如DataGridViewComboBoxEditingControl
自带的SelectedIndexChanged 事件。
2. 为什么用dataGridView1.CurrentCell.EditedFormattedValue而不是dataGridView1.CurrentCell.Value,因为处于编辑状态的cell的Value是没有同时更新的,我们更改的是它的EditedFormattedValue。这个区别当然有好处,这里不谈。
3. 为什么要加一句e.CellStyle.BackColor = Color.FromName("window") ?实践是检验真理的标准,不妨去掉这句运行一下就清楚了。
http://hi.baidu.com/yk±±¼«ÐÇ/blog/item/c4ecc50026862e08738da5f6.html
最近用了DataGridView,深有体会,最深刻一点是它的事件。我想很多人都希望编辑表格单元的同时更新其他东西,就好像TextBox的TextChanged事件,但DataGridView却没有提供类似TextChanged那样的事件。我想用下面的一个例子说明如何达到实时更新的效果。
上面的Form有一个DataGridView实例dataGridView1和一个Label实例label1。dataGridView1有3个字段,分别是班级(DataGridViewComboBoxColumn)、姓名(DataGridViewTextBoxColumn)和成绩(DataGridViewTextBoxColumn)。
现在要实现一个效果,就是如果更改了dataGridView1中任意一个cell(单元格)的值,label1的text就更新为那个cell的值。代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.dataGridView1.EditingControlShowing +=
new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
}
//编辑cell时激发的事件
void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control.GetType().Equals(typeof(DataGridViewComboBoxEditingControl)))//cell为类ComboBox时
{
e.CellStyle.BackColor = Color.FromName("window");
DataGridViewComboBoxEditingControl editingControl = e.Control as DataGridViewComboBoxEditingControl;
editingControl.SelectedIndexChanged += new EventHandler(editingControl_SelectedIndexChanged);
}
else if (e.Control.GetType().Equals(typeof(DataGridViewTextBoxEditingControl)))//cell为类TextBox时
{
e.CellStyle.BackColor = Color.FromName("window");
DataGridViewTextBoxEditingControl editingControl = e.Control as DataGridViewTextBoxEditingControl;
editingControl.TextChanged += new EventHandler(editingControl_TextChanged);
}
}
//TextBox的TextChanged事件
void editingControl_TextChanged(object sender, EventArgs e)
{
this.label1.Text = dataGridView1.CurrentCell.EditedFormattedValue.ToString();
}
//Combox的SelectedIndexChanged事件
void editingControl_SelectedIndexChanged(object sender, EventArgs e)
{
this.label1.Text = dataGridView1.CurrentCell.EditedFormattedValue.ToString();
}
}
有几点要说明的
1. EditingControlShowing 是DataGridView自带的事件,当某个cell被编辑时就会激发该事件。接着就到了dataGridView1_EditingControlShowing 函数,然后(if…else if…)判断那个cell是DataGridViewComboBoxEditingControl还是DataGridViewTextBoxEditingControl 控件类型。判断好控件类型之后就可以用该类型自带的事件,例如DataGridViewComboBoxEditingControl
自带的SelectedIndexChanged 事件。
2. 为什么用dataGridView1.CurrentCell.EditedFormattedValue而不是dataGridView1.CurrentCell.Value,因为处于编辑状态的cell的Value是没有同时更新的,我们更改的是它的EditedFormattedValue。这个区别当然有好处,这里不谈。
3. 为什么要加一句e.CellStyle.BackColor = Color.FromName("window") ?实践是检验真理的标准,不妨去掉这句运行一下就清楚了。
http://hi.baidu.com/yk±±¼«ÐÇ/blog/item/c4ecc50026862e08738da5f6.html
相关文章推荐
- DataGridView的单元格内容即时更新方法
- 焦点不动更新单元格内容(DataGridView)
- C#中datagridview使用tooltip控件显示单元格内容与datagridview自带的tooltip显示单元格内容的方法
- DataGridView的即时更新方法
- C#中datagridview使用tooltip控件显示单元格内容的方法
- jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
- DataGridView编辑后立即更新到数据库的两种方法 编辑单元格
- dataGridView操作数据(增加 读取 绑定 获取选择的单元格 选中整行单元格时颜色变换 更新数据 锁定列的位置 添加行 列头的方法)
- jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
- DataGridView的具体应用(1)-右键单击后选中所在行及弹出上下文菜单,通过事件捕获所选行的ID号及单元格内容
- 【更新】Aspose.Cells 7月新版发布 | 支持从数字文件中读取单元格内容和样式
- 更新WP Mango应用磁贴内容的3种方法
- 20161014001 DataGridView 单元格内容 自动计算
- PHP实现即时输出、实时输出内容方法
- c#DataGridView数据绑定示例——格式化单元格的内容(转)
- [唐胡璐] - DataGridView单元格显示多行的设置方法
- Web报表单元格内容竖向显示的实现方法
- PHPExcel 读取Excel单元格内容为时间格式 处理方法
- 将DataGridView 中DataGridViewComboBoxColumn列的Items内容更新后,首次执行程序界面没有更新的问题
- winform datagridview设置列单元格不可编辑可以选定指定内容