如何在子窗体刷新父窗体的datagridview
父窗体中有个datagridview,方法datashow为它绑定数据
子窗体是从父窗体中创建的,是用来新建数据的
在子窗体里有个保存按钮
请问如何在按钮事件中激发父窗体的datashow方法来给datagridview重新绑定数据
看了资料说要用 委托
请哪位高手给写个代码
谢谢。。
--------------------编程问答-------------------- 用子窗体的DialogResult判断
父窗体的写法
if (子窗体.DialogResult==DialogResult.Ok){
刷新数据
}
子窗体的写法。
如果是子窗体关闭以后刷新父窗体,就在子窗体的关闭事件中写this.DialogResult=DialogResult.Ok
否则就在保存事件中写 --------------------编程问答-------------------- 父窗体要在哪个事件中写呢? --------------------编程问答-------------------- 父窗体
public Form4()
{
InitializeComponent();
DataBind();
}
private void button1_Click(object sender, EventArgs e)
{
Form3 frm = new Form3();
this.Hide();
frm.Show();
}
void DataBind()
{
Form3 frm = new Form3();
if (frm.DialogResult == DialogResult.OK)
{
MessageBox.Show("大家好!");
}
}
子窗体
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form4 frm = new Form4();
frm.Show();
this.DialogResult = DialogResult.OK;
this.Close();
}
这样试试 --------------------编程问答-------------------- vb.net 怎么写?
谢谢
--------------------编程问答-------------------- 你这个好像是弹出子窗体时
父窗体隐藏了
我要求的父窗体并不隐藏
子窗体关闭时
父窗体要在哪个事件中知道子窗体已关闭?
--------------------编程问答-------------------- 将父窗口的datagridview作为构造参数传递给子窗口可以解决这个问题. --------------------编程问答-------------------- 是不是点击完保存关闭子窗体,刷新父窗体,如果这样,在子窗体ShowDialog代码之后刷新就可以了 --------------------编程问答-------------------- 请问在vb2005中,怎样将父窗口的datagridview作为构造参数传递给子窗口?
--------------------编程问答-------------------- 子窗体ShowDialog代码?
--------------------编程问答-------------------- private DataGridView mainDataGridView;
public Form4(DataGridView dgv)
{
InitializeComponent();
DataBind();
mainDataGridView=dgv;
}
对mainDataGridView的操作就是对主窗口的datagridview了.
--------------------编程问答-------------------- 比较简单的方法是将datashow方法Public
然后在子窗体中的按钮事件中执行
CType(Me.Owner, 父窗体类名).datashow()
--------------------编程问答-------------------- vb2005要怎么写
谢谢
--------------------编程问答-------------------- 子窗体的“CType(Me.Owner, 父窗体类名).datashow() ”
提示没有实例化
--------------------编程问答-------------------- 主窗体:
一个button,用于打开SQL填写界面
Imports System.Data
Imports System.Data.SqlClient
Public Class Form8
Private connstr As String = "Server=(local);packet size=4096;Database=testwater;User ID=sa;Password=;Trusted_Connection=False"
Private Conn As New SqlConnection(connstr)
Public sql As String
Private Sub Form8_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If sql = "" Then
sql = "select * from [test] order by id asc"
End If
l(sql)
End Sub
Private Sub l(ByVal sql As String)
' Dim sql As String = "select * from [test] order by id asc"
Dim cmd As New SqlDataAdapter(sql, Conn)
Dim ds As New DataSet
cmd.Fill(ds, "工")
MsgBox(ds.Tables("工").Rows.Count)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim c As New Form9
c.ShowDialog()
If c.DialogResult = Windows.Forms.DialogResult.OK Then
sql = c.TextBox1.Text.Trim
End If
l(sql)
End Sub
End Class
子窗体:
一个textbox,用于输入SQL语句;一个button确定语句输入完成并反回主窗体
--------------------编程问答-------------------- 不好意思~发错了~~~~~~~~对不起啊~ --------------------编程问答-------------------- 再问 --------------------编程问答-------------------- 看了一下楼上各位的答案,目前的问题我觉得如果是在子窗口关闭后判断DialogResult是否为OK再进行刷新的话应该是简单的,楼主应该也会写。如果对于有些需求来说,要求在子窗口不关闭的情况下去刷新父窗口的DataGridView(例如可以连续新增,增加一行后父窗口自动将这行显示出来而不关闭子窗口),那么这时候我建议还是在子窗口中定义一个自定义事件。在子窗口的保存按钮代码成功执行后,触发本窗口的这个自定义事件。由父窗口接收事件并刷新自己的DataGridView。这要求在打开子窗口时就将订阅子窗口的这个自定义事件(抱歉由于很久不用VB.net了,所以只能给出一部分C#代码):
Public Class Form9
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
DialogResult = Windows.Forms.DialogResult.OK
End Sub
End Class
//父窗口有关代码
vehicle.vehicleOutDetailForm outForm = new vehicleOutDetailForm();
outForm.RaiseVehicleChangedEvent += new EventHandler<VehicleChangEventArgs>(outForm_RaiseVehicleChangedEvent);
outForm.ViewMode = vehicleOutDetailForm.VehicleOutFormViewMode.AddNew;
outForm.ShowDialog();
void outForm_RaiseVehicleChangedEvent(object sender, VehicleChangEventArgs e)
{
RefreshList();
}
//子窗口中定义事件,为了扩展需要即使不传递参数还是尽量声明一个自定义事件参数类
public class VehicleChangEventArgs : EventArgs
{
public VehicleChangEventArgs(string vehicleNo)
{
this.vehicleNo = vehicleNo;
}
private string vehicleNo;
public string VehicleNo
{
get { return vehicleNo; }
}
}
public event EventHandler<VehicleChangEventArgs> RaiseVehicleChangedEvent;
//在保存按钮中可用此函数激发事件,如OnRaiseVehicleChangedEvent(new VehicleChangEventArgs(""));
protected virtual void OnRaiseVehicleChangedEvent(VehicleChangEventArgs e)
{
EventHandler<VehicleChangEventArgs> handler = this.RaiseVehicleChangedEvent;
if (handler !=null)
{
handler(this, e);
}
}
个人感觉会写VB.net相关代码的话看懂以上代码不难,仅供参考。 --------------------编程问答-------------------- 用JAVA实现就简单多了,匿名内部类很方便. --------------------编程问答-------------------- VB2005 可以在子窗体中使用form1.datagridview 这样的代码直接对父窗体form1的控件进行操作。 --------------------编程问答-------------------- 学习 一下 --------------------编程问答-------------------- 学习;了 --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 我也想知道
补充:.NET技术 , VB.NET