首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何在子窗体刷新父窗体的datagridview
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kerr1030
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-22 12:38:14 楼主
    父窗体中有个datagridview,
    方法datashow为它绑定数据
    子窗体是从父窗体中创建的,是用来新建数据的
    在子窗体里有个保存按钮
    请问如何在按钮事件中激发父窗体的datashow方法来给datagridview重新绑定数据
    看了资料说要用 委托
    请哪位高手给写个代码
    谢谢。。
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qfgyd2004
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 12:54:341楼 得分:0
    用子窗体的DialogResult判断
    父窗体的写法
    if (子窗体.DialogResult==DialogResult.Ok){
      刷新数据
    }
    子窗体的写法。
    如果是子窗体关闭以后刷新父窗体,就在子窗体的关闭事件中写this.DialogResult=DialogResult.Ok
    否则就在保存事件中写
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kerr1030
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 12:58:392楼 得分:0
    父窗体要在哪个事件中写呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qfgyd2004
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 13:13:273楼 得分:0
    父窗体
    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();
            }
    这样试试
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kerr1030
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 14:13:254楼 得分:0
    vb.net 怎么写?
    谢谢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kerr1030
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 14:16:485楼 得分:0
    你这个好像是弹出子窗体时
    父窗体隐藏了
    我要求的父窗体并不隐藏
    子窗体关闭时
    父窗体要在哪个事件中知道子窗体已关闭?
    引用 3 楼 qfgyd2004 的回复:
    父窗体
    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.Dialo…
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hefei0603
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 14:34:546楼 得分:0
    将父窗口的datagridview作为构造参数传递给子窗口可以解决这个问题.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cowboy0000
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 15:40:437楼 得分:0
    是不是点击完保存关闭子窗体,刷新父窗体,如果这样,在子窗体ShowDialog代码之后刷新就可以了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kerr1030
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:37:248楼 得分:0
    请问在vb2005中,怎样将父窗口的datagridview作为构造参数传递给子窗口?
    引用 6 楼 hefei0603 的回复:
    将父窗口的datagridview作为构造参数传递给子窗口可以解决这个问题.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kerr1030
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:39:089楼 得分:0
    子窗体ShowDialog代码?
    引用 7 楼 cowboy0000 的回复:
    是不是点击完保存关闭子窗体,刷新父窗体,如果这样,在子窗体ShowDialog代码之后刷新就可以了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hefei0603
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:53:1510楼 得分:0
    private DataGridView mainDataGridView;
    public Form4(DataGridView dgv)
            {
                InitializeComponent();
                DataBind();
                mainDataGridView=dgv;
            }
    对mainDataGridView的操作就是对主窗口的datagridview了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xldata
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:54:4211楼 得分:0
    比较简单的方法是将datashow方法Public
    然后在子窗体中的按钮事件中执行
    CType(Me.Owner, 父窗体类名).datashow()
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kerr1030
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:56:0612楼 得分:0
    vb2005要怎么写
    谢谢
    引用 10 楼 hefei0603 的回复:
    private DataGridView mainDataGridView;
    public Form4(DataGridView dgv)
            {
                InitializeComponent();
                DataBind();
                mainDataGridView=dgv;
            }
    对mainDataGridView的操作就是对主窗口的datagridview了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kerr1030
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 17:06:0813楼 得分:0
    子窗体的“CType(Me.Owner, 父窗体类名).datashow() ”
    提示没有实例化
    引用 11 楼 xldata 的回复:
    比较简单的方法是将datashow方法Public
    然后在子窗体中的按钮事件中执行
    CType(Me.Owner, 父窗体类名).datashow()
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • htpower
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 17:31:3214楼 得分:0
    主窗体:

    一个button,用于打开SQL填写界面

    VB.NET code
    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确定语句输入完成并反回主窗体
    VB.NET code
    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
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • htpower
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 17:32:3715楼 得分:0
    不好意思~发错了~~~~~~~~对不起啊~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kerr1030
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 09:08:5316楼 得分:0
    再问
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • madalin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 09:28:3217楼 得分:0
    看了一下楼上各位的答案,目前的问题我觉得如果是在子窗口关闭后判断DialogResult是否为OK再进行刷新的话应该是简单的,楼主应该也会写。如果对于有些需求来说,要求在子窗口不关闭的情况下去刷新父窗口的DataGridView(例如可以连续新增,增加一行后父窗口自动将这行显示出来而不关闭子窗口),那么这时候我建议还是在子窗口中定义一个自定义事件。在子窗口的保存按钮代码成功执行后,触发本窗口的这个自定义事件。由父窗口接收事件并刷新自己的DataGridView。这要求在打开子窗口时就将订阅子窗口的这个自定义事件(抱歉由于很久不用VB.net了,所以只能给出一部分C#代码):
    C# code
    //父窗口有关代码 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相关代码的话看懂以上代码不难,仅供参考。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xlzlzhl
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-05 09:54:2918楼 得分:0
    用JAVA实现就简单多了,匿名内部类很方便.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • limeng0513
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-05 11:33:0319楼 得分:0
    VB2005 可以在子窗体中使用form1.datagridview 这样的代码直接对父窗体form1的控件进行操作。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved