×

winform刷新窗体数据

winform刷新窗体数据(winform中一个窗口关闭后在主窗口上自动刷新显示的数据谢谢)

admin admin 发表于2023-01-11 09:16:28 浏览59 评论0

抢沙发发表评论

本文目录

winform中一个窗口关闭后在主窗口上自动刷新显示的数据谢谢


在主窗体写:

 

form2 frm=new form2;
    if (frm.ShowDialog() == DialogResult.OK)
    {
         //在form2关闭了,并且是OK的时候才执行
    }
    
    //然后在form2窗体的确定按钮事件里写,这样在点击form2的确定键后关闭form2提  
    //示主窗体你点击的是确定键,
    this.DialogResult = DialogResult.OK;
    this.Close();

winform中数据库更新后如何让窗体自动刷新大概有100个客户端,如果用Timer,那效率太低了,请高手指教


如果是自动刷新窗体中数据表,那太简单了.更新数据的函数后,加一个让引用 dataGridViewRefesh(); 这样dataGridView重新加载并刷新数据了.
void dataGridViewRefesh()
{
dataGridView1.DataSource = null;
SqlConnection con = new SqlConnection(@“server=(local);Integrated security=SSPI;database=你的数据库名“);
SqlDataAdapter Ader=new SqlDataAdapter(“select * from [你的表名]“,con);
DataSet Dset;
Ader.Fill(Dset,“Table1“);
dataGridView1.DataSource=Dset.Table[“Table1“].DefaultView;
dataGridView1.Refresh();
Dset.Dispose();
Ader.Dispose();
con.Close();
}

C# winform怎么实现子窗体关闭时刷新父窗体数据


方法1:在子窗体的colsing事件中,调用父窗体的刷新方法;
方法2:子窗体ShowDialog(),父窗体接收DialogResult.OK
时刷新;
方法3:增加程序
协调员的角色,设计界面协调者
对象实现。

winform中(当数据库的数据有变化时)datagridview 刷新的问题


winform有一个特点,只要你将数据源变化了,datagridview自然就变化了。
你如果不想每隔几秒刷,我这有两个办法。
一,记录你每次修改每张表的时间。也就是你对这个表中的数据进行增删改操作,就在数据库里把这个表的更新时间记录一下。然后在打开这个窗体进行查询的时候,同时获得这个时间,剩下的,你在timer里去拿你查询时记录的这个时间去和表中记录的时间去比较,不一样了,就说明改变了,你就重新读一遍数据去刷新grid
二,如果你的SQL版本是2005及以上,可以利用SqlDependency来实现,关于这个类的具体用法你可以百度一下,我说一下功能,就是建立一个数据库依赖,当数据库表一旦发生变化时,会自动触发.net程序中的一个方法,在这个方法中你去重新获取数据,更新你的数据源。

winform中窗体间传值并刷新


我做过这个。。 就是在要打开的窗口重载下构造函数。把第一个窗口的值传入构造函数中,再在第二个窗口中读取就行~
public s_Form()
{
InitializeComponent();
}
public s_Form(Student model)
{
InitializeComponent();
txt_SNO.Text = model.SNO;
txt_SNAME.Text = model.SNAME;
txt_SSEX.Text = model.SSEX;
txt_SBIRTHDAY.Text = model.SBIRTHDAY;
txt_CLASS.Text = model.CLASS;
}
重载构造函数
在主窗口
Student model = new Student();
model.SNO = dv_Info.SelectedRows.Cells.Value.ToString();
model.SNAME = dv_Info.SelectedRows.Cells.Value.ToString();
model.SSEX = dv_Info.SelectedRows.Cells.Value.ToString();
model.SBIRTHDAY = dv_Info.SelectedRows.Cells.Value.ToString();
model.CLASS = dv_Info.SelectedRows.Cells.Value.ToString();
s_Form sf = new s_Form(model); //调用带参的构造函数
参数就穿过去了
主要代码。。。

C# winform中实现暂停,结束,实时刷新父窗体数据


假设有A,B两个窗体,
B窗体时由A窗体弹出的A-》B
实现思路:
在A窗体上写个方法:
public void setText(string value)
{
textbox1.text=value
}
B窗体中声明一个委托
public delegate void GetTextDel(string value);
public delegate Seter; //这个写在类,里面哦!!
然后修改B窗体的构造函数:
public B( GetTextDel del)
{
.....
Seter=del;
}
在textbox2的Textchange事件中填写以下代码
Seter.invok(textbox2.text);或Seter(textbox2.text);
以上是准备工作在
A窗体上调用
new B(setText).showdialog();
最后,当你在textbox2中输入什么,texbox1中就显示立即显示在B窗体的中的数据
ok到这里你想要的功能就完成了,望采纳哈,根据你的实际情况改改就可以了

winform的窗口刷新问题:


MainForm mf=new MainForm();你这句是重新建一个实列, mf.refresh();是对你新建的这个实列操作,跟你原先已经打开的MainForm 没有什么关系,所以你当然看不到刷新了。
修改方法1:
如果你的详细信息界面ConfigurationForm 是在MainForm下用ShowDialog方式打开,那就直接在MainForm里刷新
MainForm的代码:
using (ConfigurationForm frm = new ConfigurationForm())
{
frm.ShowDialog();
this.refresh();
}
修改方法2:
如果你想在详细信息界面ConfigurationForm写刷新代码,那就像如下这么写:
((MainForm)this.Owner).refresh();
当然前提也是从MainForm打开ConfigurationForm
修改方法3:
如果你是从MissionForm 打开ConfigurationForm
那就在构造函数MainForm传过去。先传给MissionForm,再从MissionForm传给ConfigurationForm
不在构造函数传,自己写个方法也可以,这个代码多一点,我就不写了

winform 界面上怎么做到时时检测是否有新数据.有就刷新界面数据


我简单做了一个程序,用于给楼主一些思路。以下代码可以新建winform工程后直接粘贴到Form1.cs文件里去执行。

画面上拖两个textbox控件,分别命名为txtold,txtnew。
运行效果是,在txtold输入值时,txtnew可以时时显示txtold的数据。
做法是,不使用textbox自带的textchanged事件,而是用线程和委托给txtnew赋值,
避免了你使用timer控件每秒刷新造成画面卡顿的效果。

PS:时时刷新时,不建议时时从数据库取值,效率很低,还影响服务器的速度,用户体验不好
切记切记

具体实现方式看以下代码,注意有 //*****标记的那几行注释。

=============================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace refresh
{
public partial class Form1 : Form
{
private Thread m_tRefresh;
public Form1()
{
InitializeComponent();
}
/// 《summary》
/// 画面加载时
/// 《/summary》
/// 《param name=“e“》《/param》
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//开启一个时时刷新数据的线程
m_tRefresh = new Thread(new ThreadStart(refreshData));
m_tRefresh.Start();
}
/// 《summary》
/// 获取画面当前是否正在关闭的flag
/// 《/summary》
private bool m_IsOnClosing = false;
/// 《summary》
/// 画面关闭时
/// 《/summary》
/// 《param name=“e“》《/param》
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
//画面关闭事件正在执行时把m_IsOnClosing设为true
m_IsOnClosing = true;
//如果画面关闭时线程还开启,那么把他关掉
if (m_tRefresh.IsAlive)
{
m_tRefresh.Abort();
}
}
/// 《summary》
/// 线程执行的时时刷新数据的函数
/// 《/summary》
private void refreshData()
{
//while true,达到时时的目的
while (true)
{
try
{
//*****判断新txtbox和旧txtbox的值是否一样,不一样的话,把旧的值赋给新的
//*****在这里只是用两个文本框举例,你可以换成其他的,
//*****例如周期从其他类里取值,周期从其他画面取值,周期从数据库取值,等等
//*****但时时刷新时,不建议时时从数据库取值,效率很低,还影响服务器的速度,用户体验不好
if (txtnew.Text != txtold.Text)
{
if (txtnew.InvokeRequired)
{
//如果给txtnew设值时是在线程中,那么使用委托给他赋值
SetTextCallback s = SetText;
txtnew.Invoke(s, txtold.Text);
}
else
{
//如果不在线程中,那么直接赋值
txtnew.Text = txtold.Text;
}
}
}
catch (Exception ex)
{
//一些例外处理
if (!m_IsOnClosing)
{
MessageBox.Show(ex.ToString());
}
else
{
if (m_tRefresh.IsAlive)
{
m_tRefresh.Abort();
}
}
break;
}
}
}
/// 《summary》
/// 给txtbox设值的委托
/// 《/summary》
/// 《param name=“text“》《/param》
delegate void SetTextCallback(string text);
/// 《summary》
/// 设值函数
/// 《/summary》
/// 《param name=“text“》《/param》
private void SetText(string text)
{
text = text.Replace(“\0“, ““);
if (txtnew.InvokeRequired)
{
SetTextCallback s = SetText;
txtnew.Invoke(s, text);
}
else
{
txtnew.Text = text;
}
}
}
}

winform关闭新窗口,原窗口如何刷新显示


我做过。
你在
show一个新窗口(ShowDialog())
的后面
重新调用查询信息的方法就可以了。
因为当你用ShowDialog()打开一个新的窗体之后,本窗体下面的代码就不会执行了。
一直等到你关闭新窗体

也就是这个添加新数据的窗体之后。原窗体的代码会继续执行,所以就可以刷新数据了

执行的时候断点一下就明白了。