`
窗户纸
  • 浏览: 19473 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何从底层的datatable更新上层的datagridview

 
阅读更多

使用微软 SQL SERVER MANAGEMENT Studio的人都经常发现,他打开表显示数据的速度很快,而且,如果有数万条记录不能立即显示时,数据表格会自动的加载数据,而不影响整个界面的操作,那么这个效果是如何完成的呢?

肯定的一点是,他用到了多线程,数据的提取线程和界面操作不在一个线程中,这样就可以做到数据随提取,随时送到界面的表格控件中。

实现的方式就不废话了,给个代码,大家自然很容易就看懂了

public partial class Form2 : Form
{
private DDD _D;

public Form2()
{
InitializeComponent();
_D = new DDD();
dataGridView1.DataSource = _D;

_D.HasNewdata += new EventHandler(d_HasNewdata); // 关键是加载一定数据后向表格控件发出通知,以便其确认数据的更新

}

void d_HasNewdata(object sender, EventArgs e)
{
if (dataGridView1.InvokeRequired)
{
EventHandler p = new EventHandler(d_HasNewdata);
dataGridView1.Invoke(p,sender,e );
}
else
{

dataGridView1.Refresh();

_D.AcceptChanges(); //要使用确认更新,表格才能正确显示
}
}

private void Form2_Load(object sender, EventArgs e)
{
_D.GenData();
}
}

class DDD:DataTable
{

public event EventHandler HasNewdata;
private void SendInfo()
{
HasNewdata.Invoke(this , new EventArgs());
}
private ManualResetEvent _WC1 = new ManualResetEvent(false );
public DDD()
{
this.Columns.Add("d1");
this.Columns.Add("d2");
this.Columns.Add("d3");
this.Columns.Add("d4");
this.Columns.Add("d5");

}

public void GenData()
{


Thread t = new Thread(new ThreadStart(G2));
t.Start();

}


private void G2()
{
List <object[] > x =new List<object[]> ();

for (int i = 0; i < 1000; i++)
{
string a = string.Format ("d1_{0}",i);
string b = string.Format ("d2_{0}",i);
string c = string.Format ("d3_{0}",i);
string d = string.Format ("d4_{0}",i);
string e = string.Format("d5_{0}", i);

object[] t = new object[5] { a, b, c, d,e };
x.Add(t);
}
int j = 0;
SendInfo( );
foreach (object[] p in x)
{
j++;

this.Rows.Add(p);
if (j == 100) //可以任选间隔显示的频率
{
SendInfo( );
j = 0;
}

}
SendInfo( );
}

}

另:该程序在实际运行时会发现在VS.NET环境下运行很好,但直接运行有时会卡死,现象是一出scrollbar就死,解决的方法很多,我想到的方法如下:

经测试使用AcceptChange会搞死界面,但使用scrollbar= both时就不会,可以先时dgv的scrollbar=none, 在显示行数超出当前窗体时再invoke出scrollbar=both来即可。

分享到:
评论

相关推荐

    datatable、datagridview导出为csv

    本篇文章将详细介绍如何从DataTable和DataGridView高效地导出数据到CSV文件。 首先,让我们了解DataTable和DataGridView。DataTable是ADO.NET数据模型的一部分,它在内存中代表了一个表格数据集,可以理解为数据库...

    datatable 按字段绑定 datagridview

    解决 datatable 不按字段顺序 绑定 datagridview的问题

    Datagridview与Datatable同步排序

    在探讨“Datagridview与Datatable同步排序”的过程中,我们需要深入了解这两个控件的基本概念、工作原理以及如何实现它们之间的同步排序。以下将详细介绍这一知识点。 ### Datagridview简介 `DataGridView`是.NET ...

    DataGridView或DataTable导出为Excel

    ### DataGridView或DataTable导出为Excel的关键知识点 #### 一、问题背景及解决方案概述 在将DataGridView或DataTable中的数据导出到Excel文件时,经常会遇到一个问题:数字字符串在导出后可能会丢失前导零(例如,...

    excel转化成datatable 并加载到datagridview

    本程序详细描述了excel转化成datatable 并加载到datagridview 中的实现过程,简单便捷,代码完整,下载之后运行即可

    打印datagridview datatable

    打印datagridview datatable

    DataGridView 详解 使用技巧 添加、修改、删除数据操作

    在我们的示例代码中,我们使用 MySqlDataAdapter 的 Update 方法来更新数据,然后将其保存回 DataTable 中。最后,我们将 DataTable 绑定到 DataGridView 中,以便用户可以查看修改后的数据。 删除数据操作 在删除...

    C# datagridview 与数据源绑定后对数据的,增加,删除,插入,更新

    本教程将深入探讨在C#中,当DataGridView与数据源绑定后如何进行数据的增加、删除、插入和更新操作。 ### 数据源绑定 首先,我们需要创建一个数据源,这可以是任何实现了`IList`或`IBindingList`接口的对象,如...

    将DataGridView或DataTable导出为Excel支持进度条[参考].pdf

    4. `ExportToExcel(DataGridView dgv, ProgressBar pb)`:与上一个方法类似,但首先从DataGridView转换数据。 在这些方法中,关键的步骤包括: - 创建Excel Application实例,用于执行Excel相关操作。 - 创建新的...

    datagridview绑定datatable数据,添加合计行,后可排序

    本话题主要关注如何将`DataTable`的数据绑定到`DataGridView`,并在此基础上添加合计行,以及实现排序功能。 首先,让我们详细解释`DataGridView`和`DataTable`的基本概念。`DataGridView`是Windows Forms中的一种...

    datagridview生成datable

    根据提供的部分代码,我们可以看到一个方法`DataGridViewToDT`被定义用于实现从DataGridView到DataTable的转换。下面将对该方法进行详细的分析和解释: ```csharp private DataTable DataGridViewToDT(DataGridView...

    DataTable DataGridView 导出到Excel表格 的Excel操作类

    要实现从`DataTable`或`DataGridView`导出到Excel,我们需要一个能够处理Excel文件操作的类。`ExcelOpera`类就是这样一个工具,它封装了创建、写入和保存Excel文件的方法。通常,此类会使用`Microsoft.Office....

    c#datagridview删除更新.zip

    在这个特定的场景中,我们关注的是如何在DataGridView中实现数据的删除和更新,并同步这些操作到数据库中。下面我们将深入探讨这个主题。 首先,我们需要了解DataGridView与数据库之间的连接。通常,我们会使用ADO...

    使用DataTable更新数据库(增,删,改)

    1、修改数据 代码如下: DataRow dr = hRDataSet.Tables[“emp”].Rows.Find(textBox3.Text); //DataRow dr = hRDataSet.Tables[“emp”].Select(“id=”+textBox3.Text)[0]; dr.BeginEdit();...

    C#DataGridView中的常用技巧

    DataTable dt = ds.Tables[biaom.Trim()]; DataRow myrow = ds.Tables[biaom.Trim()].NewRow(); for (int j = 0; j &lt; dataGridView1.Columns.Count; j++) { myrow[j] = Convert.ToString(dataGridView1.Rows[i]...

    实现 DataTable按条件进行更新(类似sql的update)

    本篇文章将详细讲解如何使用C#来实现类似于SQL的`UPDATE`语句,对DataTable中的数据进行条件性更新。 首先,我们需要了解DataTable的基本结构。DataTable通常包含多个DataRow,每个DataRow代表表中的一行记录。每一...

    创建DataTable结构,添加、删除数据,绑定显示在dataGridView控件上

    在Windows Forms应用中,`dataGridView`控件常被用来展示`DataTable`中的数据,提供用户友好的界面进行查看、编辑和管理数据。下面将详细介绍如何创建`DataTable`结构,向其中添加和删除数据,以及如何将其绑定到`...

    .net DataGridView增删改查实例.zip

    对于修改记录,通常会在用户编辑完单元格后触发`DataGridView.CellValueChanged`事件,此时更新DataTable中的对应行,然后调用`SaveChangesToDatabase`方法。 注意,为了保证数据的一致性,每次对数据库进行修改前...

    c#实现datagridview绑定到数据库的图像点击时显示在picturebox中

    2. **加载数据到DataGridView**:创建一个SqlCommand对象查询`Images`表,并将结果填充到一个DataTable中,然后将DataTable绑定到DataGridView。 ```csharp SqlCommand command = new SqlCommand("SELECT ID, Name,...

Global site tag (gtag.js) - Google Analytics