搜索
您的当前位置:首页正文

winform的子窗体关闭刷新主窗体绑定数据以及刷新的总结

来源:步旅网

1.其实实现主窗体的刷新无非就是比较简单的调用load事件重新加载数据绑定,但是这样的效果会带来,无状态刷新,页面无法保存上一次的页面状态,比如

刷新前

刷新后

,如果点击刷新按钮执行的话,那么树形菜单会恢复关闭状态,那么如何实现这种刷新保持状态的效果呢?我们这边可以通过两个方法进行实现,原理未为:使用Hashtable来保存每个节点的状态.在把所有Nodes清空掉之前遍历TreeView,取得每个节点的状态,然后根据DataSet重新添加Nodes,添加完成后得根据刚才建立的Hashtable信息来设置每个节点的状态

代码如下:

主要就是给TreeView添加Nodes的前面和后面分别添加上这两个函数GetTreeNodesStatus(tv.Nodes);SetTreeNodesStatus(tv.Nodes);

 通过以上代码在load事件中重新加载的话,就不会再关闭节点了,会保持当前状态;

第二个问题来了,如何在子窗体中增加数据后绑定到主窗体显示,在子窗体关闭的时候展示在列表中?

我们这边可以通过两种方式进行实现:

第一种:1.在父窗体弹出子窗体的事件打开ShowDialog()之前,对父窗体做一个hide的假关闭

ChildForm fr2 = new ChildForm ();
this.Hide();
fr2.ShowDialog();

然后在子窗体的处理事件中,数据处理后的回调,对父窗体隐藏做一个展示效果

this.Close();

ParentForm fr2 = new ParentForm ();

fr2.ShowDialog();

以上就是第一种方式处理,但是这样处理增加或者修改数据的话,返回到主窗体后,主窗体还是一个关闭树的状态效果,无法保持上一次展开树菜单的效果?

因此我们需要考虑,在子窗体关闭之后,需要调用我们一开始说的绑定树列表的方法,里面会记录状态,那么我们如何去调用主窗体的这个绑定过程呢?

第二种:1.定义一个绑定的方法,无参数的绑定方法

//子窗体调用重新加载数据的方法
        public void reLoad_method()
        {
            //窗体数据初始化方法,父窗体中的全部操作,调用此方法可实现数据的刷新
            InitDataTable();
            BindRoot();
            BindViewList(rtsno);//rtsno为全局sno
        }

2.父窗体弹出子窗体的事件打开ShowDialog()之前,设置拥有此窗体的窗体 

ChildForm fr2 = new ChildForm (l);
fr2.Owner = this;
fr2.ShowDialog();

3.在子窗体中调用父窗体的加载记录状态的方法

ParentForm fr;
                fr= (ParentForm)this.Owner;
                fr.reLoad_method();//reLoad_method就是重新加载数据的函数

总结:第二种方式体验效果更直观,也能对主窗体的状态记录有一个保持,就不会回填之后主窗体被重新加载状态消失。

 

在这次开发过程中,出现了一个问题,就是窗体弹出来的事件show和showDialog的区别,用的第二种方法,如果直接弹出子窗体用show事件的话,那么子窗体调用父窗体加载记录方法会抛异常,如果用showDialog的话,就不会出现异常的问题,这两者的区别具体见博客:

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top