datagridview的datasource中的值改变,激发什么事件?

时间:2022-11-08 10:31:34
我有一个datagridview,绑定了一个datatable,绑定后datatable中的值改变,我想使数据改变的行切换另一种背影颜色,我需要用什么事件才能激发呢?另datatable不需重新绑定.

14 个解决方案

#1


CellValueChanged事件


        private void dgvTest_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            this.dgvTest.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
        }

#2


System.Data.DataTable table = new System.Data.DataTable();
table.RowChanged += new System.Data.DataRowChangeEventHandler(table_RowChanged);

void table_RowChanged(object sender, System.Data.DataRowChangeEventArgs e)
        {
            // Get row index by property e.Row
        }

#3


引用 1 楼 diffmaker 的回复:
CellValueChanged事件

C# codeprivatevoiddgvTest_CellValueChanged(objectsender, DataGridViewCellEventArgs e)
        {this.dgvTest.Rows[e.RowIndex].DefaultCellStyle.BackColor=Color.Red;
        }

.

#4


学习一下。正需要这些资料。

#5


来参观的,帮顶.

#6


引用 1 楼 diffmaker 的回复:
CellValueChanged事件 


C# code
        private void dgvTest_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            this.dgvTest.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
        }


这样好像并不能激发这个事件,我在做时因为datasource已经绑定了,只是datatable内部的数据值改变,datagridview好像并没有发现其cell中的值已经改变了.

#7


DataBindingComplete事件!!

#8


引用 2 楼 Gregorian 的回复:
System.Data.DataTable table = new System.Data.DataTable(); 
table.RowChanged += new System.Data.DataRowChangeEventHandler(table_RowChanged); 

void table_RowChanged(object sender, System.Data.DataRowChangeEventArgs e) 
        { 
            // Get row index by property e.Row 
        }


我试了一下,e.Row获取不到行号,只能获取到一个实际改变过的dataRow.

#9


引用 7 楼 justindreams 的回复:
DataBindingComplete事件!!


我的datatable完成绑定时数据并没有改变,是完成了绑定后,其他的进程改变了我的datatable.

#10


引用 9 楼 zhudaifu 的回复:
引用 7 楼 justindreams 的回复:
DataBindingComplete事件!! 
 

我的datatable完成绑定时数据并没有改变,是完成了绑定后,其他的进程改变了我的datatable.

用DataBindingComplete事件没问题,你试一试吧,只要改变datatable,这个事件就会触发

#11


引用 6 楼 zhudaifu 的回复:
引用 1 楼 diffmaker 的回复:
CellValueChanged事件 


C# code 
        private void dgvTest_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
        { 
            this.dgvTest.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red; 
        } 
 

这样好像并不能激发这个事件,我在做时因为datasource已经绑定了,只是datatable内部的数据值改变,datagridview好像并没有发现其cell中的值…


你的datatable内部的数值是怎么改变的?不是在DataGridView中修改的?

#12


你的DataTable中的数据是被另一个进程修改的?
------------------------
这样的话修改完后的dataTable应该不会马上在你的datagridview上体现出来吧?
也就是说你要重新绑定才会体现出来.

#13


引用 12 楼 lovehongyun 的回复:
你的DataTable中的数据是被另一个进程修改的? 
------------------------ 
这样的话修改完后的dataTable应该不会马上在你的datagridview上体现出来吧? 
也就是说你要重新绑定才会体现出来.


如果修改datatable里面的数据,必须重新bind

#14


引用 13 楼 jietuan 的回复:
引用 12 楼 lovehongyun 的回复:
你的DataTable中的数据是被另一个进程修改的? 
------------------------ 
这样的话修改完后的dataTable应该不会马上在你的datagridview上体现出来吧? 
也就是说你要重新绑定才会体现出来. 
 

如果修改datatable里面的数据,必须重新bind


我是用BackgroundWorker来更新datatable的,用主进程在更新主界面上的进度条等.当datatable中的值改变时,datagridview界面中的值也就随之改变了,不需重新Bind,我试过了重新Bind,但也没有激发上面的那些事件.

#1


CellValueChanged事件


        private void dgvTest_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            this.dgvTest.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
        }

#2


System.Data.DataTable table = new System.Data.DataTable();
table.RowChanged += new System.Data.DataRowChangeEventHandler(table_RowChanged);

void table_RowChanged(object sender, System.Data.DataRowChangeEventArgs e)
        {
            // Get row index by property e.Row
        }

#3


引用 1 楼 diffmaker 的回复:
CellValueChanged事件

C# codeprivatevoiddgvTest_CellValueChanged(objectsender, DataGridViewCellEventArgs e)
        {this.dgvTest.Rows[e.RowIndex].DefaultCellStyle.BackColor=Color.Red;
        }

.

#4


学习一下。正需要这些资料。

#5


来参观的,帮顶.

#6


引用 1 楼 diffmaker 的回复:
CellValueChanged事件 


C# code
        private void dgvTest_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            this.dgvTest.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
        }


这样好像并不能激发这个事件,我在做时因为datasource已经绑定了,只是datatable内部的数据值改变,datagridview好像并没有发现其cell中的值已经改变了.

#7


DataBindingComplete事件!!

#8


引用 2 楼 Gregorian 的回复:
System.Data.DataTable table = new System.Data.DataTable(); 
table.RowChanged += new System.Data.DataRowChangeEventHandler(table_RowChanged); 

void table_RowChanged(object sender, System.Data.DataRowChangeEventArgs e) 
        { 
            // Get row index by property e.Row 
        }


我试了一下,e.Row获取不到行号,只能获取到一个实际改变过的dataRow.

#9


引用 7 楼 justindreams 的回复:
DataBindingComplete事件!!


我的datatable完成绑定时数据并没有改变,是完成了绑定后,其他的进程改变了我的datatable.

#10


引用 9 楼 zhudaifu 的回复:
引用 7 楼 justindreams 的回复:
DataBindingComplete事件!! 
 

我的datatable完成绑定时数据并没有改变,是完成了绑定后,其他的进程改变了我的datatable.

用DataBindingComplete事件没问题,你试一试吧,只要改变datatable,这个事件就会触发

#11


引用 6 楼 zhudaifu 的回复:
引用 1 楼 diffmaker 的回复:
CellValueChanged事件 


C# code 
        private void dgvTest_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
        { 
            this.dgvTest.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red; 
        } 
 

这样好像并不能激发这个事件,我在做时因为datasource已经绑定了,只是datatable内部的数据值改变,datagridview好像并没有发现其cell中的值…


你的datatable内部的数值是怎么改变的?不是在DataGridView中修改的?

#12


你的DataTable中的数据是被另一个进程修改的?
------------------------
这样的话修改完后的dataTable应该不会马上在你的datagridview上体现出来吧?
也就是说你要重新绑定才会体现出来.

#13


引用 12 楼 lovehongyun 的回复:
你的DataTable中的数据是被另一个进程修改的? 
------------------------ 
这样的话修改完后的dataTable应该不会马上在你的datagridview上体现出来吧? 
也就是说你要重新绑定才会体现出来.


如果修改datatable里面的数据,必须重新bind

#14


引用 13 楼 jietuan 的回复:
引用 12 楼 lovehongyun 的回复:
你的DataTable中的数据是被另一个进程修改的? 
------------------------ 
这样的话修改完后的dataTable应该不会马上在你的datagridview上体现出来吧? 
也就是说你要重新绑定才会体现出来. 
 

如果修改datatable里面的数据,必须重新bind


我是用BackgroundWorker来更新datatable的,用主进程在更新主界面上的进度条等.当datatable中的值改变时,datagridview界面中的值也就随之改变了,不需重新Bind,我试过了重新Bind,但也没有激发上面的那些事件.