实现两窗体DataGridView数据实时传递,并将子窗体修改后数据传回

最近在尝试设计一个数据查询和数据库信息实时提醒以及变更数据,设计界面如下:

大概就是这样的形状的窗体,解决的方案如下:

首先通过父窗体(Form1)中DataGridView_CellEnter调取子窗体,然后通过修改父窗体的单元格录入数据,在子窗体中实时调取数据库中信息,这种格式类似于医院的药品录入。废话不多说。

1、设计的时候我使用的是委托

子窗体中建立

        //声明一个委托
        public delegate void DisplayUpdateDelegate(string str);
        //声明一个事件
        public event DisplayUpdateDelegate showUpate;

父窗体中调取

            Form2 fm = new Form2(x + dgvX, y + dgvY + hight,width, 200);//使用单元格相对坐标和尺寸 来锚定子窗体
            fm.Owner = this;
            fm.showUpate += new Form2.DisplayUpdateDelegate(ShowMessage);
            fm.Show();

值得一提的是,Form2(x + dgvX, y + dgvY + hight,width, 200)其中dgvX和dgvY是DataGridView的屏幕坐标,这里不再详细讲解如何操作了。

2、 编辑数据和接受数据

子窗体中建立接受数据属性

      public string AcceptText
        {
            set
            {               
                tb.Text = value;
            }
        }

父窗体中建立显示数据方法

     private void ShowMessage(string str)
        {
            dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value = str;
        }

3、实时数据变化,这里用到的是EditingControlShowing事件和单元格数值变化事件。

4、子窗体修改数据传回父窗体中

父窗体需要首先停止DataGridView编辑,使用DataGridView.EndEdit();

子窗体

          if (showUpate != null)
            {
                showUpate(dataGridView1.CurrentCell.EditedFormattedValue.ToString());
            }

以上就是完成实现两窗体DataGridView数据实时传递,并将子窗体修改后数据传回的主要关键代码,希望有不当之处批评指正,也希望对您有所帮助。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
假设您的主窗体中有一个按钮,点击该按钮会打开一个新窗体,该新窗体中有一个 TextBox 和一个按钮,您可以按照以下步骤将 TextBox 中的数据写入到主窗体DataGridView 中: 1. 在主窗体中,为 DataGridView 绑定数据源(可以是 DataTable 或任何实现了 IList 接口的集合类)。 ```csharp private void Form1_Load(object sender, EventArgs e) { // 创建 DataTable 对象 DataTable table = new DataTable(); table.Columns.Add("姓名"); table.Columns.Add("年龄"); // 绑定数据dataGridView1.DataSource = table; } ``` 2. 在新窗体中,添加一个公共属性,用于获取 TextBox 中的数据。 ```csharp public partial class Form2 : Form { // 公共属性,用于获取 TextBox 中的数据 public string InputText { get { return textBox1.Text; } } public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // 点击按钮时,关闭窗体 this.Close(); } } ``` 3. 在主窗体中,添加打开新窗体的按钮的事件处理程序,通过该事件处理程序打开新窗体,并将 TextBox 中的数据写入到 DataGridView 中。 ```csharp private void button1_Click(object sender, EventArgs e) { // 创建新窗体对象 Form2 form2 = new Form2(); // 显示新窗体 form2.ShowDialog(); // 获取新窗体中的数据 string inputText = form2.InputText; // 将数据写入到 DataGridView 中 DataTable table = dataGridView1.DataSource as DataTable; table.Rows.Add(inputText, 0); } ``` 上述代码中,我们首先创建了一个新窗体对象,并显示该窗体。在新窗体中输入数据并点击按钮后,新窗体会关闭,并将 TextBox 中的数据通过公共属性传递给主窗体。主窗体接收到数据后,将其添加到 DataGridView数据源中。请注意,我们在将数据添加到 DataTable 中时,将年龄设置为 0,因为我们没有在新窗体中输入年龄。如果您需要输入年龄,可以在新窗体中添加一个 TextBox,类似地获取数据并将其添加到 DataTable 中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值