悲伤 不想说话

using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

    public partial class FDataGridView : Form  // 在窗体上拖一个DataGridView上去
{
// 1) 实现System.ComponentModel.INotifyPropertyChanged接口
class Character : INotifyPropertyChanged
{
string _name;
[DisplayName("你的名字")] // 这是显示的列名称哦
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
NotifyPropertyChanged("Name");
}
}
} // 2) 在属性改变时引发事件
int _age;
[DisplayName("他的年纪")]
public int Age
{
get { return _age; }
set
{
if (_age != value)
{
_age = value;
NotifyPropertyChanged("Age");
}
}
} PropertyChangedEventHandler _propertyChanged;
public event PropertyChangedEventHandler PropertyChanged
{
add { _propertyChanged += value; }
remove { _propertyChanged -= value; }
} private void NotifyPropertyChanged(string property_name)
{
_propertyChanged?.Invoke(this, new PropertyChangedEventArgs(property_name));
}
} /* end of class Character */ DataTable _dtSource; // 方式一 BindingList<Character> _bdList; // 方式二
BindingSource _bdSource; public FDataGridView()
{
InitializeComponent(); FormClosing += FDataGridView_FormClosing; Menu = new MainMenu();
MenuItem operation = new MenuItem("Operation"); Menu.MenuItems.Add(operation); MenuItem menu1 = new MenuItem("DataTable");
MenuItem menu11 = new MenuItem("Bind DataSource", menu11_Click);
MenuItem menu12 = new MenuItem("Change Data", menu12_Click);
MenuItem menu13 = new MenuItem("Create Data", menu13_Click);
menu1.MenuItems.Add(menu11);
menu1.MenuItems.Add(menu12);
menu1.MenuItems.Add(menu13); MenuItem menu2 = new MenuItem("BindingSource");
MenuItem menu21 = new MenuItem("Bind DataSource", menu21_Click);
MenuItem menu22 = new MenuItem("Change Data", menu22_Click);
MenuItem menu23 = new MenuItem("Create Data", menu23_Click);
menu2.MenuItems.Add(menu21);
menu2.MenuItems.Add(menu22);
menu2.MenuItems.Add(menu23); operation.MenuItems.Add(menu1);
operation.MenuItems.Add(menu2); Init();
} private void FDataGridView_FormClosing(object sender, FormClosingEventArgs e)
{
_dtSource.Dispose();
_bdList.Clear();
_bdSource.Dispose(); _dtSource = null;
_bdList = null;
_bdSource = null;
} void Init()
{
_dtSource = new DataTable();
_bdList = new BindingList<Character>();
_bdSource = new BindingSource();
_bdSource.DataSource = _bdList; // 3) 绑定数据源,由BindingSoource组件处理细节 _dtSource.Columns.Add(new DataColumn("Name"));
_dtSource.Columns.Add(new DataColumn("Age")); DataRow dr; dr = _dtSource.NewRow();
dr["Name"] = "";
dr["Age"] = "";
_dtSource.Rows.Add(dr); dr = _dtSource.NewRow();
dr[] = "";
dr[] = "";
_dtSource.Rows.Add(dr); _dtSource.Rows.Add(, ); _bdList.Add(new Character() { Name = "", Age = });
_bdList.Add(new Character() { Name = "", Age = });
_bdList.Add(new Character() { Name = "", Age = });
} #region menu click
private void menu11_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
dataGridView1.DataSource = _dtSource;
} private void menu12_Click(object sender, EventArgs e)
{
_dtSource.Rows[][] = new Random().Next(, );
} private void menu13_Click(object sender, EventArgs e)
{
_dtSource.Rows.Add(Guid.NewGuid().ToString("N"), "en");
} private void menu21_Click(object sendr, EventArgs e)
{
dataGridView1.DataSource = null;
dataGridView1.DataSource = _bdSource;
} private void menu22_Click(object sender, EventArgs e)
{
_bdList[].Age = new Random().Next(, );
} private void menu23_Click(object sender, EventArgs e)
{
_bdList.Add(new Character() { Name = Guid.NewGuid().ToString("N") });
}
#endregion private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
;// dataGridView1.DataError += dataGridView1_DataError; 处理表格异常
} private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
if (e.RowIndex >= )
e.Graphics.DrawString((e.RowIndex + ).ToString(), e.InheritedRowStyle.Font, Brushes.Red, e.RowBounds.X + , e.RowBounds.Y + );
} } /* end of class */

WinForm DataGridView实时更新表格数据的更多相关文章

  1. Jquery无刷新实时更新表格数据

    html代码: <style> .editbox { display:none } .editbox { font-size:14px; width:70px; background-co ...

  2. 在Winform中直接录入表格数据和在Vue&Elment中直接录入表格数据的比较

    一般来说,录入数据的时候,我们都采用在一个窗体界面中,根据不同内容进行录入,但是有时候涉及主从表的数据录入,从表的数据有时候为了录入方便,也会通过表格控件直接录入.在Winform开发的时候,我们很多 ...

  3. android ListView中含有按钮事件实时更新ListView数据案例

    1.布局文件Listview <?xml version="1.0" encoding="utf-8"?> <android.support. ...

  4. WebSocket 实时更新mysql数据到页面

    使用websocket的初衷是,要实时更新mysql中的报警信息到web页面显示 没怎么碰过web,代码写的是真烂,不过也算是功能实现了,放在这里也是鞭策自己,web也要多下些功夫 准备 引入依赖 & ...

  5. Python tkinter库将matplotlib图表显示在GUI窗口上,并实时更新刷新数据

    代码 1 ''' 2 使用matplotlib创建图表,并显示在tk窗口 3 ''' 4 import matplotlib.pyplot as plt 5 from matplotlib.pylab ...

  6. 实现DataGridView实时更新数据

    ;).ToString() + ).ToString() + "秒";        } }}

  7. Web实时更新客户端数据

    1        轮询方式实现客户端数据及时更新 在基于Web的即时通信.股票行情这样的系统中,需要客户端能够及时更新内容.由于B/S架构的特性(Http连接是无状态连接, 即服务器处理完客户的请求, ...

  8. solr实时更新mysql数据的方法

    第一步:创建core core是solr的特有概念,每个core是一个查询数据,.索引等的集合体,你可以把它想象成一个独立数据库,我们创建一个新core:名字[core1] 进入linux命令行,进入 ...

  9. Android RecyclerView嵌套EditView实时更新Item数据

    一.场景(例如:购物车) 1.当我们需要以列表样式管理某些数据时,可能需要列表项的某个字段可编辑 2.编辑Item上的某个字段后可能还要更新相关字段的值 二.可能遇到的问题 1.列表滑动导致输入框中的 ...

随机推荐

  1. php SESSION入库的实现

    session入库,就是重写session制机,在session的周期内,获得到session的数据并记录到数据库 Session默认是存放到服务器上的文件中,不方便管理,如果能把session存放到 ...

  2. quillJS 富文本编辑器源码分析系列1

    quillJS 富文本编辑器目前是一款很火富文本编辑器,使用广泛,github 上面的 star 有 22,492,虽然说不以 star 论英雄,不过这可以说明它还是比较受欢迎的: 它的特点是:轻量, ...

  3. 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书

    缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5>前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改, ...

  4. ASP.NET Core中使用GraphQL - 最终章 Data Loader

    ASP.NET Core中使用GraphQL - 目录 ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间 ...

  5. WebView,我已经长大了,知道自己区分是否安全了!

    一.前言 如果你在用 Android 原生系统(Google Play 服务),在使用 WebView 加载某些网页时,一定遇到过以下的安全警告红屏. 这是 WebView 的安全浏览保护策略,在 A ...

  6. java并发编程(1) --并发基础及其锁的原理

    引言 多线程的知识点是一个庞大的体现,对此也是一知半解.一直想系统的深入的学习多线程的知识,奈何一直没有找到机会,好吧,其实就是懒.最近在项目中接触到一个多并发的项目,在项目中踩了无数的坑.在此下定决 ...

  7. Java 泛型完全解读

    对于泛型的使用我想大家都非常熟悉,但是对于类型擦除,边界拓展等细节问题,可能不是很清楚,所以本文会重点讲解一下:另外对泛型的了解其实可以看出,一个语言特性的产生逻辑,这对我们平时的开发也是非常有帮助的 ...

  8. String字符串类总结

    object类 int hashCode() Object定义的hashCode方法能为不同对象返回不同的整数.实际上是把JVM给对象分配的地址转化为整数,确保了逻辑上的唯一性.而转化的散列算法,可能 ...

  9. 什么是HTML?

    在了解概念之前,先做以下操作,在桌面新建一个txt文件,然后在txt文件中输入:“Hello World”,保存该文件并将其后缀名改为.html,然后双击打开,你就能在浏览器上看到页面显示“Hello ...

  10. 使用 FFT 进行频谱分析

    下面的示例说明了如何使用 FFT 函数进行频谱分析.FFT 的一个常用场景是确定一个时域噪声信号的频率分量. 首先创建一些数据.假设是以 1000 Hz 的频率对数据进行的采样.首先为数据构造一条时间 ...