winform有一个特点,只要你将数据源变化了,datagridview自然就变化了。
你如果不想每隔几秒刷,我这有两个办法。
一,记录你每次修改每张表的时间。也就是你对这个表中的数据进行增删改 *** 作,就在数据库里把这个表的更新时间记录一下。然后在打开这个窗体进行查询的时候,同时获得这个时间,剩下的,你在timer里去拿你查询时记录的这个时间去和表中记录的时间去比较,不一样了,就说明改变了,你就重新读一遍数据去刷新grid
二,如果你的SQL版本是2005及以上,可以利用SqlDependency来实现,关于这个类的具体用法你可以百度一下,我说一下功能,就是建立一个数据库依赖,当数据库表一旦发生变化时,会自动触发net程序中的一个方法,在这个方法中你去重新获取数据,更新你的数据源。
thisdatagridview1datasource=dataset1tables[0];//绑定数据源,这样在界面修改单元格时,就可以更新到dataset
dataAdapter dataadapter1=new dataAdapter(selectSQL,connnection);
dataadapter1update(dataset1tables[0]);//通过datatable修改数据库
thisdataGridView1DataSource = myDSTables[0]DefaultView;//输出表}catch (Exception oe) { MessageBoxShow(oeMessage, "数据库出错!"); }finally{if (mySqlConnectionState == ConnectionStateOpen)mySqlConnectionClose();}} DATAGridView只是显示控件,实际上你下面的按钮实现的只是一个填加工作,你上面的是显示。用记录集datatable记录一下信息就行了。
首先你gridview绑定的数据源最好是DataTable类型,当你编辑好数据进行修改后,可以将datagridview的数据源转换成DataTable类型,然后利用 DataRowState循环获取每行的状态是更改还是更新 *** 作,如果为更新 *** 作你可以遍历每列生成update的语句,然后统一抛给执行更新sql的方法去 *** 作。源码给你吧
DataTable dt1 = (dataGridView1DataSource as DataTable)GetChanges();
if (dt1 != null)
{
for (int i = 0, h = dt1RowsCount; i < h; i++)
{
DataRowState rowState = new DataRowState();
rowState = dt1Rows[i]RowState;
string state = rowStateToString();
string id = GuidNewGuid()ToString();
if (stateEquals("added", StringComparisonCurrentCultureIgnoreCase))
{
string str = stringFormat("insert into haadbbcp values('{0}','{1}','{2}','{3}');",id ,treeView1SelectedNodeTag, dt1Rows[i][1]ToString(), dt1Rows[i][5]ToString());
dataGridView1Rows[0]Cells["编号"]Value = id;
ss += str;
}
if (stateEquals("modified", StringComparisonCurrentCultureIgnoreCase))
{
string str = stringFormat("update hbbcp set hbbcp_WLBH='{0}',hbbcp_bz='{1}' where HBBCP_ID='{2}';", dt1Rows[i][1]ToString(), dt1Rows[i][5]ToString(), dt1Rows[i]["编号"]ToString());
ss += str;
}
可以用代理事件实现。不过简单一点的方法就是下面我介绍的这种。
Form1是Datagridview的页面。Form2是修改值的页面。
Form1:
private void changedata()
{
if(Form2ShowDialog() == DialogResultOK)
{
//重新绑定数据库
BindDgv();
}
}
Form2:
private void btnOK_Click()
{
//修改数据代码
//下面这句代码将触发上面Form1中的代码,实现重新绑定。
thisDialogResult==DialogResultOK;
}
以上就是关于winform中(当数据库的数据有变化时)datagridview 刷新的问题全部的内容,包括:winform中(当数据库的数据有变化时)datagridview 刷新的问题、c#winform datagridview控件怎么在上面直接修改并且更新到sql数据库、c#datagridview更新数据至数据库。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)