关闭另一个表单后如何在数据网格视图中重新加载数据?

时间:2015-11-03 15:51:24

标签: c# winforms datagridview

我正在做一个简单的程序,在数据网格视图中显示某些客户端的数据,并且有一个添加新的客户端选项。我正是通过打开新形式来做到这一点。问题是当添加新客户端时,它不会出现在第一种形式的数据网格中。我已经制作了一个“刷新”按钮,但是我希望这个任务能够由程序自动完成。到目前为止,这是我的代码:

private void Form1_Load(object sender, EventArgs e)
    {
        List<Client> list = new List<Client>();
        list = cnn.Select();
        dataGridClients.DataSource = list;
    }

private void btnRefresh_Click(object sender, EventArgs e)
    {
        List<Client> list = new List<Client>();
        list = cnn.Select();
        dataGridClients.DataSource = list;
    }

这是我用来显示数据的功能。这是添加客户端表单代码:

private void AddClientFunc(object sender, EventArgs e)
    {
        string date = dateSelected.Year +"-"+ dateSelected.Month +"-"+ dateSelected.Day;
        string cycLenght = txtBoxInsertCycle.Text;
        int len;
        if(txtBoxInsertName.Text != "" && txtBoxInsertDate.Text != "")
        {
            try
            {
                len= Convert.ToInt32(cycLenght);
                cnn.Insert(txtBoxInsertName.Text, date, len);
            }
            catch (FormatException ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
            this.Close();
        }
        else
        {
            MessageBox.Show("Please fill all the fields", "Error");
        }
    }

这是单击按钮时调用的添加客户端功能。这是一张照片,所以你可以更好地理解我在做什么:enter image description here

那么如何自动刷新?

3 个答案:

答案 0 :(得分:1)

当窗口关闭时,可能有一种方法可以调用刷新。

但是,利用bindingSource代替列表可能是处理网格数据的更好方法。这样您就不会尝试保持本地列表和数据网格数据源同步。 BindingSource是网格/应用程序数据的单一权限。

我创建了一个新的winform项目。添加了一个Client类,将其添加为winform设计器打开的对象数据源。然后将类拖放到表单上,它创建了一个datagridview,其中绑定源都已连线。

这是背后的表格代码:

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();

            //var clientBindingSource = new BindingSource(); // Set in designer
            clientBindingSource.Add(new Client {Id = 1, Name = "Rob"});
            clientBindingSource.Add(new Client {Id = 2, Name = "Tim"});

            //clientDataGridView.DataSource = clientBindingSource; // Set in designer
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Updating the binding source updates the grid            
            clientBindingSource.Add(new Client {Id = 3, Name = "Kathy"});
            //clientBindingSource.EndEdit(); // May or may not have to end edit to see results
        }
    }
}

答案 1 :(得分:0)

因为您将list绑定到数据网格。您只需将新客户端添加到列表中即可。您可以将以下行附加到代码中。

list = cnn.Select();

下的

cnn.Insert(txtBoxInsertName.Text, date, len);
在你的try块中

。似乎cnn.select()只选择所有数据。你也可以写

list.add(x);

其中x是新添加的客户端。但我不知道这与您的数据库如何对应。我的第一个解决方案效率不高,因为你总是会覆盖你已经拥有的大部分内存。

只需将其添加到您的第二张表格

即可
List<Client> list;

并更改第二个表单的构造函数

public Form2(List<Client> list)
{
 this.list=list;
...
}

所以列表也出现在你的第二张表格中。

答案 2 :(得分:0)

您可以使用委托创建活动。

你可以看:https://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx