C#子窗体实现主窗体的刷新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#子窗体实现主窗体的刷新相关的知识,希望对你有一定的参考价值。

我有两窗体,一个列表在下面,一个是添加在上面
我想点击添加窗体的确定键,后面类表里面就显示添加的内容 ,但前后窗体不改变样式!!!!!!!!!
主窗体:
public partial class UserInfoList : Form

private DataSet dataSet = new DataSet();
private SqlDataAdapter dataAdapter;
public UserInfoList()

InitializeComponent();

public void Bind1()

FillDgv("SELECT * FROM Info RIGHT OUTER JOIN Result ON Info.客户代码 = Result.KHDM");
dgvInfoList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

public void UserInfoList_Load(object sender, EventArgs e)

Bind1();

public void FillDgv(string sqlstr)

string sql = sqlstr;
dataAdapter = new SqlDataAdapter(sql, DBHelper.connection);
dataAdapter.Fill(dataSet)
dgvInfoList.DataSource = dataSet.Tables[0];
DBHelper.connection.Close();

子窗体:
private void btnOK_Click(object sender, EventArgs e)

//调用验证输入方法
if (ValidateInput())

//打开数据库连接
DBHelper.connection.Open();
//编写插入sql语句
string sql = string.Format("INSERT INTO Result(KHDM ,[TIME] ,RESULT)VALUES ('0','1','2')", this.lblKHMC.Text.Trim(), DateTime.Parse(dtpTime.Text).ToString("yyyy/MM/dd"), cboResult.Text);
SqlCommand command = new SqlCommand(sql, DBHelper.connection);
int result = (int)command.ExecuteNonQuery();
if (result > 0)

MessageBox.Show("添加成功!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
num++;
this.txtUser.Text = list[num];
this.lblKHMC.Text = listId[num];
UserInfoList a = new UserInfoList();
a.Bind1();/////////////////////////点击确定,显示后面窗体的刷新内容??????????
DBHelper.connection.Close();

什么叫不改变样式?
如果是两个窗体共享数据,有一个比较巧妙的方法.
比如有两个窗体,form1和form2
可以在form1里,新添加一个Form类型的属性,指向form2
在添加窗体里添加下边的代码
private Form _mainForm;
public Form mainForm

getreturn _mainForm;
setthis._mainForm = value;


当添加窗体被实例化的时候,设置属性
Form2 form2 = new Form2();
form2.mainForm = this; //this指的是Form1

这样,Form1里的内容就可以调用了,可能个别地方,写个方法或者改下protected 改成public就可以了追问

我要的是如图所显示的样子,点击确定,后面刷新,下一条再点击,后面刷新,子窗体一直在上面操作,主窗体不断更新

追答

我刚写的没看明白吗?

追问

你没解答我的问题,我是没办法刷新,我想实现就是我上面说的操作,我代码页很明确的写出了我的问题,有没有可以实现刷新的方法,我上面写的方法是没办法调用的(异常)

追答

看来你还是没看我写的内容.
----------------------------------------
UserInfoList a = new UserInfoList();
a.Bind1();
----------------------------------------
关键就错在第一行.
UserInfoList a = new UserInfoList();
这句话的意思是实例化一个新的UserInfoList 对象,然后调用他的Bind1方法
这两行代码执行完了,a的数据刷新了.但是他并不是你的父窗体,只能说是和你的父窗体同一个类的另外一个实例.

追问

你回答我的,编写的错误我已经懂了,能加下好友,或者HI一下,你书写的方法我有点不知道怎么用,在添加窗体中:书写
private Form _mainForm;
public Form mainForm

getreturn _mainForm;
setthis._mainForm = value;

----还是。。。。。然后。。。。就晕了

参考技术A 最简单的方法 ,在主窗体打开子窗体时
//打开子窗体事件
private void bt_MeetingSet_Click(object sender, EventArgs e)

MeetingSet newform = new MeetingSet();
newform.OpenType = 0;
newform.ShowDialog(this);
setData(_where);//重新绑定数据

参考技术B 这个很简单。
1、主窗口写一个public的刷新数据函数。
2、在显示子窗体的地方设置子窗体的Owner为主窗体。
3、在子窗体的btnOK单击事件中通过Owner调用第一步中创建的那个public函数。
OK

C# WPF MVVM模式下在主窗体显示子窗体并获取结果

01

前言

在winform中打开一个新的子窗体很简单,直接实例化窗体并show一下就可以:

Form2 f2 = new Form2();


  f2.Show();

或者

Form2 f2 = new Form2();


  f2.ShowDialog();

但是,在wpf的mvvm模式下,这种方法是行不通的,因为逻辑是在viedmodel中写的,CM框架下viewmodel和view是通过正则自动匹配的。所以正常是通过调用框架下得WindowManager接口,在window后台代码中通过WindowManager注册需要弹出的窗体类型,在ViewModel通过WindowManager的Show或ShowDialog方法,显示出来。

02


ShowDialog用法实现

首先实例化新的子窗体SubShowWindowViewModel ,然后通过CM框架的ioc容器获取IWindowManager接口,通过接口的ShowDialog调出子窗体,ControlTestStr 用来显示子窗体的赋值并在界面显示。

using Caliburn.Micro;
using PropertyChanged;


namespace CaliburnTest
{
    [AddINotifyPropertyChangedInterface]
    public class ControlTestViewModel
    {
        public string ControlTestStr { get; set; } = string.Empty;
        public void  NewWindowShow()
        {
            ControlTestStr = "NewWindowShow";
            SubShowWindowViewModel subShowWindowViewModel = new SubShowWindowViewModel(ControlTestStr);
            IWindowManager windowManager = IoC.Get<IWindowManager>();
            windowManager.ShowDialog(subShowWindowViewModel);
            ControlTestStr = subShowWindowViewModel.SubShowWindowStr;
        }
    }
}

03


结果演示

ControlTestStr 获取到了新窗体的赋值并显示到了界面.

以上是关于C#子窗体实现主窗体的刷新的主要内容,如果未能解决你的问题,请参考以下文章

关于子窗体关闭同时刷新父窗体的问题

C# Winform主窗体和子窗体之间如何相互操作对方的控件

c# 怎么完全隐藏mdi子窗体的标题栏?

C# 主窗体在子窗体关闭时显示

关于winform子窗体刷新父窗体

c#用toolstripbutton打开子窗体