C# c语言中的Datagridview刷新#

C# c语言中的Datagridview刷新#,c#,datagridview,C#,Datagridview,我正在尝试重置datagridview,即使datatable和绑定源正在更改,但它不会反映在datagridview中。我想我错过了什么。其想法是在新数据进入时每秒刷新DGV。新数据不仅是行的添加,而且整个表可能会更改 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; us

我正在尝试重置datagridview,即使datatable和绑定源正在更改,但它不会反映在datagridview中。我想我错过了什么。其想法是在新数据进入时每秒刷新DGV。新数据不仅是行的添加,而且整个表可能会更改

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Timer timer = new Timer();
            timer.Interval = (5000); // 10 secs
            timer.Tick += new EventHandler(timer_Tick);
            timer.Start();
            MessageBox.Show("You are here");
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            DataGridView my_datagridview = new DataGridView();
            DataTable my_datatable = new DataTable();
            my_datagridview.DataSource = null;
            BindingSource source = new BindingSource();
            this.Size = new Size(1075, 300);
            my_datagridview.Size = new Size(1075, 400);
            my_datagridview.Location = new Point(5, 5);
            string[] raw_text =
            System.IO.File.ReadAllLines("L:\\cat3_data.csv");
            string[] data_col = null;

            int y = raw_text.Count();

            for (int i = 0; i < raw_text.Count() - 1; i++)
            {
                if (i == 0)
                {
                    data_col = raw_text[i].Split(',');

                    for (int r = 0; r <= data_col.Count() - 1; r++)
                    {
                        my_datatable.Columns.Add(data_col[r]);
                    }
                }
                else
                {
                    data_col = raw_text[y - i].Split(',');
                    MessageBox.Show(data_col[0]);
                    my_datatable.Rows.Add(data_col);
                }
                source.ResetBindings(false);
                source.DataSource = my_datatable;
                my_datagridview.DataSource = source;
                my_datagridview.Update();
                my_datagridview.Refresh();
                this.Controls.Add(my_datagridview);
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
命名空间Windows窗体应用程序1
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
定时器=新定时器();
timer.Interval=(5000);//10秒
timer.Tick+=新事件处理程序(timer\u Tick);
timer.Start();
MessageBox.Show(“你在这里”);
}
私有无效计时器(对象发送方、事件参数)
{
DataGridView my_DataGridView=新建DataGridView();
DataTable my_DataTable=新DataTable();
my_datagridview.DataSource=null;
BindingSource=新的BindingSource();
该尺寸=新尺寸(1075300);
my_datagridview.Size=新大小(1075400);
my_datagridview.Location=新点(5,5);
字符串[]原始文本=
System.IO.File.ReadAllLines(“L:\\cat3\u data.csv”);
字符串[]数据_col=null;
int y=原始文本.Count();
对于(int i=0;i对于(int r=0;r您每次都添加gridview,这是.Controls.add(my_datagridview);但是您是否删除过旧的gridview?我猜这就是您一直看到原始gridview的原因

您可以执行以下任一选项:

// if the DataGridView is the only control, you can remove all the controls on the form
// this.Controls.Clear();

// or you can remove all the DataGridView controls if it is the only Datagridview control
this.Controls.OfType<DataGridView>().ToList().ForEach( x => this.Controls.Remove( x ) );

this.Controls.Add(my_datagridview);
//如果DataGridView是唯一的控件,则可以删除表单上的所有控件
//this.Controls.Clear();
//或者,如果DataGridView控件是唯一的DataGridView控件,则可以删除所有DataGridView控件
this.Controls.OfType().ToList().ForEach(x=>this.Controls.Remove(x));
this.Controls.Add(my_datagridview);

每次添加gridview时,此.Controls.add(my_datagridview);但是你有没有删除过旧的?我是新手,所以有点错过了一些小东西,再次感谢你在这里帮助我。没问题。如果它对你有效,你可以选择它作为答案。有没有其他方法可以做到这一点?意思是,每次我的数据库发生更改时,我们都必须清除DGV吗?如果你绑定到数据表,你可以应该能够只做一次,并不断更改数据表。但是如果可以添加/删除列,您可能需要重新创建所有内容。另一个选项是,不添加/删除整个控件,但您可以清除所有数据并删除所有列,并读取所有列和数据。这听起来是一个很好的方法t、 我想做的是将表单分为两个DGV,一个具有常量项,只需读取一次,另一个负责更改值。但我遇到了如何清除这两个DGV中只有一个DGV的表单的问题