悲伤 不想说话

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. 单例模式--java代码实现

    单例模式 单例模式,顾名思义,在程序运行中,实例化某个类时只实例化一次,即只有一个实例对象存在.例如在古代,一个国家只能有一个皇帝,在现代则是主席或总统等. 在Java语言中单例模式有以下实现方式 1 ...

  2. 微软正式发布Chromium Edge开发预览版

    目录 下载与注册 更多下载信息与订阅 导入Chrome部分数据 扩展安装 安装开发预览版是否会与Win10自带的Edge冲突? 一大早从朋友圈看到消息,微软正式发布Chromium Edge 开发预览 ...

  3. 软件测试自动化的最新趋势对开源测试管理软件ITEST的启示

    https://www.infoq.cn/article/c-LHJS2ksuDxp1WkrGl4 理面提到几点,DevOps 的关键原则是开发团队.测试团队和运营团队协作,无缝发布软件.这意味着集中 ...

  4. Bootstrap3级联多选下拉框

    <!DOCTYPE html> <html> <head> <title>Bootstrap3级联多选下拉框</title> <met ...

  5. 联发科Helio P90,MT6779VWB芯片处理器

    联发科(p90)MT6779VWB芯片是一个集成了蓝牙.fm.wlan和gps模块的高度集成的基带平台,包括调制解调器和应用处理子系统.支持LTE/LTE-A和C2K智能手机应用程序.该芯片集成了两个 ...

  6. Android之崩溃日志管理

    文章大纲 一.Android崩溃日志管理简介二.崩溃日志管理实战三.项目源码下载   一.Android崩溃日志管理简介 1. 什么是android崩溃日志管理   开发中有些地方未注意可能造成异常抛 ...

  7. vivo4.0系统怎么不ROOT激活Xposed框架的教程

    在越来越多应用室的引流,或业务操作中,大多数需要使用安卓的强大Xposed框架,前几天,我们应用室采购了一批新的vivo4.0系统,大多数都是基于7.0以上系统,大多数不能够刷入Root的su权限,即 ...

  8. v4v7升级到androidx过程

    因为原项目应用的都是v4v7包,谷歌改成androidx后就升级了一番,首先在properties文件 然后在菜单里点击升级,studio会帮你把报名什么的都改掉 打开项目,发现都自动改掉了,完美,然 ...

  9. SQL Server2008进程堵塞处理方法

    进程堵塞处理方法: select * from sys.sysprocesses where blocked <>0 and DB_NAME(dbid)='GSHCPDB'   ##查询堵 ...

  10. docker的简单使用

    1.下载centos镜像 docker pull centos 2.查看本地所有镜像 docker images 3.后台运行docker docker run -t -i -d centos /bi ...