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;
----还是。。。。。然后。。。。就晕了
//打开子窗体事件
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#子窗体实现主窗体的刷新的主要内容,如果未能解决你的问题,请参考以下文章