我正在做一个简单的程序,在数据网格视图中显示某些客户端的数据,并且有一个添加新的客户端选项。我正是通过打开新形式来做到这一点。问题是当添加新客户端时,它不会出现在第一种形式的数据网格中。我已经制作了一个“刷新”按钮,但是我希望这个任务能够由程序自动完成。到目前为止,这是我的代码:
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");
}
}
这是单击按钮时调用的添加客户端功能。这是一张照片,所以你可以更好地理解我在做什么:
那么如何自动刷新?
答案 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