首页 新闻 会员 周边

TreeView刷新问题

0
悬赏园豆:30 [已关闭问题]

利用委托在子窗体中插入数据并刷新父窗体

结果父窗体更新函数倒是顺利执行了,但是TreeView中刚插入的项目还是没有显示出来,需要再执行一次更新函数才能显示

插入的内容不能及时更新出来,怎么解决?

问题补充: 父窗体: private void btnAdd_Click(object sender, EventArgs e) { g_var.action = "add_contacter"; EditContacterForm addContacterForm = new EditContacterForm(); addContacterForm.UpdateList += new UpdateListHandle(UpdateList); addContacterForm.ShowDialog(); } public void UpdateList() { 清除treeview数据,然后重新读取和添加 } 子窗体: namespace NotePlus { public delegate void UpdateListHandle(); public partial class EditContacterForm : Form { public EditContacterForm() { InitializeComponent(); } OleDbConnection db = new OleDbConnection(); public UpdateListHandle UpdateList; private void btnEdit_Click(object sender, EventArgs e) { if (g_var.action == "add_contacter") { string ct_name = tbName.Text; string ct_mobile = tbMobile.Text; string ct_tel = tbTel.Text; string ct_email = tbEmail.Text; int class_id = Convert.ToInt16(cbClass.SelectedValue); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = db; cmd.CommandText = String.Format("insert into np_contact(ct_name,ct_mobile,ct_tel,ct_email,class_id) values('{0}','{1}','{2}','{3}',{4})",ct_name,ct_mobile,ct_tel,ct_email,class_id); cmd.ExecuteNonQuery(); UpdateList(); this.Close(); } } private void btnCannel_Click(object sender, EventArgs e) { this.Close(); } } }
shaoyun的主页 shaoyun | 初学一级 | 园豆:35
提问于:2010-02-25 02:55
< >
分享
其他回答(4)
0

不是很明白你的意思,不知道是不是你在子窗体插入一个项目,然后同时刷新父窗体不就可以了

陳修君 | 园豆:480 (菜鸟二级) | 2010-02-25 09:19
0

贴出代码吧,思路没有问题。为什么没有更新不确定是那的问题。

你的数据插入是在子窗体执行的还是在父窗体执行的?

是传参数到父窗体执行新增,还是在子窗体新增-->然后调用父窗体重新取treeview数据?

正确顺序应该是:

      父窗体初始化委托-->弹出子窗体-->执行更新操作-->调用父窗体委托实例〔刷新treeview〕

     父窗体初始化委托-->弹出子窗体-->调用父窗体委托实例、传参数-->委托实例执行更新操作并刷新treeview

邢少 | 园豆:10926 (专家六级) | 2010-02-25 09:29
0

能给出界面或者代码一类的东西吗,看着有些晕

棋圣 | 园豆:197 (初学一级) | 2010-02-25 18:18
0

C#中进行后台处理建议直接用 backgroundworker组建,很方便的。

东国先生 | 园豆:225 (菜鸟二级) | 2010-02-28 15:05
0

我感觉你的代码调用顺序有问题:

按照常规做法:

1.应该将刷新界面的委托单独声明,而不是声明在窗体里面,因为按照你的目的,为的就是在添加完数据后在界面有一个更新;

public delegate UpdateHandler(参数);

 

//该方法应该封装在另一个类中

 

public class EventBroker

{

public event UpdateHandler Updated;

public void FireRefresh()

{

  if(Updated != null)

               {

        Updated();

      }

}

}

2.在你的业务代码里维护一个该委托类型的事件;

public classic Contact

{

     private EventBroker Events = New EventBroker();

      public void Update()

{

         //todo : 更新联系人的操作

          enentbroker.FireRefresh();

}

}

3.在窗体中注册该事件:

    Contact.Events.Updated +=new UpdateHandler(Updatelist);

  vod Updatelist()

{

   //todo  :     刷新界面

}  

 

你所描述的问题,并没有添加联系人信息的代码啊!请贴出

xiaolun | 园豆:70 (初学一级) | 2010-03-11 12:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册