通过反射快速实现DataGridView数据的添加,获取及序列化
来源:互联网 发布:网络设计方案ppt 编辑:程序博客网 时间:2024/06/05 10:36
最近手上没有新项目,比较清闲,特地去研究一下经常使用的DataGridView控件,希望能快速实现数据的存储,以下是一些学习心得,仅作为备忘录以及提供给有兴趣的同行一个参考,同时希望各位大神能指出不足和改进的地方。
1.首先创建一个基本数据类
[Serializable] public class ItemBase { public bool Data1 { get; set; } public string Data2 { get; set; } public short Data3 { get; set; } public int Data4 { get; set; } public float Data5 { get; set; } public double Data6 { get; set; } }
2.创建数据集合类并继承 ISerializable 接口
[Serializable] public class DataHub : ISerializable { private List<ItemBase> _items; public List <ItemBase > Items { get { return _items; } set { _items = value; } } public DataHub () { _items = new List<ItemBase>(); } private DataHub(SerializationInfo info, StreamingContext ctxt) { SerializationInfoEnumerator irator = info.GetEnumerator(); while (irator.MoveNext()) { ItemBase item = new ItemBase(); PropertyInfo[] infos = item.GetType().GetProperties(); foreach (PropertyInfo pi in infos) { pi.SetValue(item, info.GetValue(pi.Name, pi.GetType()), null); } _items.Add(item); } } public void GetObjectData(SerializationInfo info, StreamingContext ctxt) { foreach (ItemBase item in _items) { PropertyInfo[] infos = item.GetType().GetProperties(); foreach (PropertyInfo pi in infos) { info.AddValue(pi.Name, pi.GetValue(item, null), pi.GetType()); } } }
3.DataGridView列初始化(此处也可以根据自己的需求手动添加列,但是添加的时候要注意保持列命名要与步骤1中属性名称一致)
private void Init() { ItemBase item = new ItemBase(); PropertyInfo[] infos = item.GetType().GetProperties(); foreach (PropertyInfo pi in infos) { DataGridViewColumn dgvC; if (pi.PropertyType == typeof(Boolean)) { dgvC = new DataGridViewCheckBoxColumn(); } else { dgvC = new DataGridViewTextBoxColumn(); } dgvC.Name = pi.Name; dgvC.HeaderText = pi.Name; dgvTest.Columns.Add(dgvC); } }
4.添加行数据,保存,清空,加载的Demo
public void AddData(ItemBase item) { if (item != null) { int count = dgvTest.Rows.Count; dgvTest.Rows.Add(); PropertyInfo[] infos = item.GetType().GetProperties(); foreach (PropertyInfo pi in infos) { dgvTest[pi.Name, count].Value = pi.GetValue(item, null); } } } public List<ItemBase> GetDatas() { List<ItemBase> items = new List<ItemBase>(); int count = dgvTest.Rows.Count; for (int i = 0; i < count; i++) { ItemBase item = new ItemBase(); PropertyInfo[] infos = item.GetType().GetProperties(); foreach (PropertyInfo pi in infos) { pi.SetValue(item, dgvTest[pi.Name, i].Value, null); } items.Add(item); } return items; }
1)添加数据
private void BtnAdd_Click(object sender, EventArgs e) { ItemBase ib = new ItemBase(); // 数据类初始化赋值 AddData(ib); }
2)保存数据
private void BtnSave_Click(object sender, EventArgs e) { DataHub dh = new DataHub(); dh.Items = GetDatas(); XmlSerializer ser = new XmlSerializer(typeof(DataHub)); string path = System.Environment.CurrentDirectory + "\\Tracks.xml"; using (Stream fs = new FileStream(path, FileMode.Create, FileAccess.Write)) { ser.Serialize(fs, dh); } }
3)清空数据
private void BtnClear_Click(object sender, EventArgs e) { dgvTest.Rows.Clear(); }
4)加载数据
private void BtnLoad_Click(object sender, EventArgs e) { XmlSerializer ser = new XmlSerializer(typeof(DataHub)); string path = System.Environment.CurrentDirectory + "\\Tracks.xml"; DataHub tracks; using (Stream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) { tracks = (DataHub)ser.Deserialize(fs); } foreach (ItemBase item in tracks.Items) { AddData(item); } }
阅读全文
0 0
- 通过反射快速实现DataGridView数据的添加,获取及序列化
- C#利用DataGridView实现数据的快速输入
- C#利用DataGridView实现数据的快速输入
- 实现datagridview中数据的添加,更改,删除功能
- datagridview获取行中列的数据
- 利用DataGridView及Excel实现数据的导入导出备份
- 手工添加datagridview数据的一种方法
- 通过反射获取实例化
- datagridview 数据动态添加
- DataGridView控件添加数据
- DataGridView动态添加数据
- DataGridView 添加数据
- DataGridView控件添加数据
- dataGridView获取指定行的数据
- 通过反射获取变量泛型参数化的类型
- 黑马程序员 :(反射应用 )通过反射讲<Integer>类型的集合中添加一个<String>类型的数据
- java通过反射机制为实例添加数据
- C#通过反射获取按钮的文本
- 使用命令排查网络问题图
- php运算符的优先级
- 制作一个python-docker image and run a container!
- 十五、吉比特2017秋招<最大差值>
- hdu2222-AC自动机&模板-Keywords Search
- 通过反射快速实现DataGridView数据的添加,获取及序列化
- 关于java 截取特定字符串的探索
- 内网映射,外网ip访问内网内容
- 自定义博客园Markdown样式.超简单!
- POJ3204-Ikki's Story I
- Andrew Ng机器学习笔记(一)
- SpringMVC 拦截器实现原理和登录实现
- 深度学习——数学与机器学习基础
- 20170902 -- 个人规划