WinForm DataGridView实时更新表格数据
悲伤 不想说话
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实时更新表格数据的更多相关文章
- Jquery无刷新实时更新表格数据
html代码: <style> .editbox { display:none } .editbox { font-size:14px; width:70px; background-co ...
- 在Winform中直接录入表格数据和在Vue&Elment中直接录入表格数据的比较
一般来说,录入数据的时候,我们都采用在一个窗体界面中,根据不同内容进行录入,但是有时候涉及主从表的数据录入,从表的数据有时候为了录入方便,也会通过表格控件直接录入.在Winform开发的时候,我们很多 ...
- android ListView中含有按钮事件实时更新ListView数据案例
1.布局文件Listview <?xml version="1.0" encoding="utf-8"?> <android.support. ...
- WebSocket 实时更新mysql数据到页面
使用websocket的初衷是,要实时更新mysql中的报警信息到web页面显示 没怎么碰过web,代码写的是真烂,不过也算是功能实现了,放在这里也是鞭策自己,web也要多下些功夫 准备 引入依赖 & ...
- Python tkinter库将matplotlib图表显示在GUI窗口上,并实时更新刷新数据
代码 1 ''' 2 使用matplotlib创建图表,并显示在tk窗口 3 ''' 4 import matplotlib.pyplot as plt 5 from matplotlib.pylab ...
- 实现DataGridView实时更新数据
;).ToString() + ).ToString() + "秒"; } }}
- Web实时更新客户端数据
1 轮询方式实现客户端数据及时更新 在基于Web的即时通信.股票行情这样的系统中,需要客户端能够及时更新内容.由于B/S架构的特性(Http连接是无状态连接, 即服务器处理完客户的请求, ...
- solr实时更新mysql数据的方法
第一步:创建core core是solr的特有概念,每个core是一个查询数据,.索引等的集合体,你可以把它想象成一个独立数据库,我们创建一个新core:名字[core1] 进入linux命令行,进入 ...
- Android RecyclerView嵌套EditView实时更新Item数据
一.场景(例如:购物车) 1.当我们需要以列表样式管理某些数据时,可能需要列表项的某个字段可编辑 2.编辑Item上的某个字段后可能还要更新相关字段的值 二.可能遇到的问题 1.列表滑动导致输入框中的 ...
随机推荐
- 关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法.变量. 在一个进程中,也就是一个jvm 或者说应用中,我们很容易去处理控制,在j ...
- asp.net core 3.0 gRPC框架小试
什么是gRPC gRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,采用ProtoBuf 定义的IDL. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优 ...
- 数据库分片(Database Sharding)详解
本文由云+社区发表 作者:腾讯云数据库 Introduction 导言 任何看到显著增长的应用程序或网站,最终都需要进行扩展,以适应流量的增加.以确保数据安全性和完整性的方式进行扩展,对于数据驱动的应 ...
- .net core redis 驱动推荐,为什么不使用 StackExchange.Redis
前言 本人从事 .netcore 转型已两年有余,对 .net core 颇有好感,这一切得益于优秀的语法.框架设计. 2006年开始使用 .net 2.0,从 asp.net 到 winform 到 ...
- Java 泛型完全解读
对于泛型的使用我想大家都非常熟悉,但是对于类型擦除,边界拓展等细节问题,可能不是很清楚,所以本文会重点讲解一下:另外对泛型的了解其实可以看出,一个语言特性的产生逻辑,这对我们平时的开发也是非常有帮助的 ...
- Java多线程与并发之面试常问题
JAVA多线程与并发 进程与线程的区别 进程是资源分配的最小单位,线程是CPU调度的最小单位 所有与进程相关的资源,都被记录在PCB(进程控制块)中 进程是抢占处理机的调度单位:线程属于某个进程,共享 ...
- 设计模式之Singleton模式和Strategy模式是什么
Singleton模式 单例模式,也交单子模式,有时候系统只需要拥有一个全局对象. 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建.这个类提供了一种访问其唯一的对象的方 ...
- 基于html5 plus + Mui 移动App开发(三)-食全库
食全库-食品安全知识库. 食品安全(food safety)指食品无毒.无害,符合应当有的营养要求,对人体健康不造成任何急性.亚急性或者慢性危害.根据倍诺食品安全定义,食品安全是“食物中有毒.有害物质 ...
- Android 9.0适配遇到的问题1
文章同步自javaexception 本周在适配Android 9.0,过程中碰到了小问题 问题1: SSL handshake timed out 解决办法: Android 9.0 开始,默认不允 ...
- OPPO X9007 升级到Android5.0 Color2.1(root版) 详细纪实
今天要做个测试,而测试APK刚好是要求最低5.0版本,正好手里有个老款手机OPPO X9007,而预装的系统是4.3,试了下虽然也能运行,但是主要功能不正常,毕竟人家APK最低要求摆在那. 反正这个手 ...