您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐