Devexpress gridcontrol行内增删改操作

  • 最近经常做winform的项目,现在接触了一个新项目,要求使用了第三方框架,就是Devexpress,因为之前没有用过这个东西,而且要实现的效果是需要行内进行新增修改,不是一种跳出窗体或者嵌入窗体。在网上找了好久没有这种的,我趁着周日休息晚上花了2个小时研究了一个小Demo,比较简单总体效果是这样的。
    • 说的全面一些,首先是GridControl这个控件的按钮列表需要设置的东西

最近经常做winform的项目,现在接触了一个新项目,要求使用了第三方框架,就是Devexpress,因为之前没有用过这个东西,而且要实现的效果是需要行内进行新增修改,不是一种跳出窗体或者嵌入窗体。在网上找了好久没有这种的,我趁着周日休息晚上花了2个小时研究了一个小Demo,比较简单总体效果是这样的。

字段没用太多,主要是要进行一个增伤改的行内效果。下面是新增行的一个效果。按钮的样式我没有太注重,现在就主要做一个这样控件的功能。有兴趣可以自己研究一下控件样式。

说的全面一些,首先是GridControl这个控件的按钮列表需要设置的东西

  1. 还有一个属性需要设置Buttons下的TextEditStyle设置为HideTextEditor。这个没有截图。
  2. 这里按钮的个数需要点击Buttons后的三个点进入操作窗体
  3. 这个界面要修改Kind属性为Glyph,如果是一列需要多个按钮需要设置Caption名称,用这个做后台判断
  4. 之后是设置按钮事件,下面是步骤,我用ButtonClick,他还有个Click,我在网上查资料后说Click没有反应,我就直接用的ButtonClick,有兴趣可以去做做实验,这些设置的东西网上都有。
  5. 接下来就是后台按钮事件的方法 比较长,直接一个事件方法
     /// <summary>/// 按钮点击事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void repositoryItemButtonEdit1_ButtonClick(object sender, ButtonPressedEventArgs e){DataTable Adddt= new DataTable();// 这里就是通过按钮的Caption判断他操作了哪个按钮if (e.Button.Caption == "添加"){// 循环获取总列数for (int i = 0; i < this.gridView1.Columns.Count; i++){// 获取列名string ColumnName = this.gridView1.Columns[i].FieldName;// 获取选中行int[] pRows = this.gridView1.GetSelectedRows();// 这个判断是因为有些按钮操作列是没有设置FieldName名称 不把他们添加到数据集里if (ColumnName != ""){if (pRows.GetLength(0) > 0){// 获取选择列的单元格数据var info = gridView1.GetRowCellValue(pRows[0], ColumnName).ToString();if (info != "" ){// 定义表接收数据Adddt.Columns.Add(ColumnName);// 生成存储数据的一列DataRow dr = Adddt.NewRow();// 将数据赋值到DataRow里dr[ColumnName] = info;// 存储到DataTable里Adddt.Rows.Add(dr);}}}}// 这是采用了一个DataTable转List的方法 网上挺多的公共方法 直接调用即可  为了传递给后台var infos = DataTableToList.ToDataDto<UserInfo>(Adddt);// 调用的方法dal.AddGo(infos);// 刷新界面SelectDb();}else if (e.Button.Caption == "修改"){DataTable uptdt = new DataTable();// 修改这里要把DataRow放在循环外 不然他每次都会添加一行新的空白行存储DataRow dr = uptdt.NewRow();// 循环获取总列数for (int i = 0; i < this.gridView1.Columns.Count; i++){// 获取列名string ColumnName = this.gridView1.Columns[i].FieldName;// 获取选中行int[] pRows = this.gridView1.GetSelectedRows();if (ColumnName != ""){if (pRows.GetLength(0) > 0){// 获取选择列的单元格数据var info = gridView1.GetRowCellValue(pRows[0], ColumnName).ToString();// 这里多了个id的判断 需要把id也存进来if (info != "" || ColumnName == "Id"){// 定义表接收数据uptdt.Columns.Add(ColumnName);dr[ColumnName] = info;}}}}uptdt.Rows.Add(dr);var infos = DataTableToList.ToDataDto<UserInfo>(uptdt);dal.UptGo(infos);SelectDb();}else // 删除{if (MessageBox.Show("确定删除所选数据?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK){// 在这里用try catch是防止新增一行空白 在删除的时候获取id会报错try{int[] selectRows = this.gridView1.GetSelectedRows();// 获取选中行idint tsNo = Convert.ToInt32(this.gridView1.GetRowCellValue(selectRows[0], "Id"));// Id 需要获取选中行的指定列名dal.DelGo(tsNo);SelectDb();}catch (Exception){// 删除空白行 并刷新界面SelectDb();return;}}}}
  1. 下面是一个新增空白行的代码 比较简单
     /// <summary>/// 新增空白列/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void repositoryItemButtonEdit5_ButtonClick(object sender, ButtonPressedEventArgs e){this.gridView1.AddNewRow();}

8.还有DataTable转List方法

     /// <summary>/// DataTable转成Dto/// </summary>/// <typeparam name="T"></typeparam>/// <param name="dt"></param>/// <returns></returns>public static T ToDataDto<T>(this DataTable dt){T s = Activator.CreateInstance<T>();if (dt == null || dt.Rows.Count == 0){return s;}var plist = new List<PropertyInfo>(typeof(T).GetProperties());for (int i = 0; i < dt.Columns.Count; i++){PropertyInfo info = plist.Find(p => p.Name == dt.Columns[i].ColumnName);if (info != null){try{if (!Convert.IsDBNull(dt.Rows[0][i])){object v = null;if (info.PropertyType.ToString().Contains("System.Nullable")){v = Convert.ChangeType(dt.Rows[0][i], Nullable.GetUnderlyingType(info.PropertyType));}else{v = Convert.ChangeType(dt.Rows[0][i], info.PropertyType);}info.SetValue(s, v, null);}}catch (Exception ex){throw new Exception("字段[" + info.Name + "]转换出错," + ex.Message);}}}return s;}

有些地方做的可能不是很好,因为刚接触这个控件,主要写就为了记录一下自己研究的这玩意,能帮上忙就看一看吧。

                                     小陈-2020.4.6 20:53

小陈-Devexpress gridcontrol行内增删改操作相关推荐

  1. 小博老师解析Java核心技术 ——JDBC普通增删改操作

    [引言] 我们在学习Java编程时,连接数据库技术(JDBC)是一项必备技能,我们经常需要读取或操作持久性存储的结构化数据.那么现在开始,小博老师就开始为大家讲解JDBC中的常用操作技术,今天我们来了 ...

  2. DevExpress GridControl功能总结

    写在前面,Dev控件已经很久了,功能也很强大,截止到现在我编写文档出来的Dev的版本已经到了14.1了,看了Demo真的很强大,效果也很好,结合自己这一个月开发,分享一下自己研究过后的经验,不让大家走 ...

  3. 复习JavaWeb的小项目书籍信息的增删改查分页功能实现Java面试题Session和Cookie的基础概念生活【记录一个咸鱼大学生三个月的奋进生活】034

    记录一个咸鱼大学生三个月的奋进生活034 JavaWeb的增删改查分页功能实现 前期准备工作(数据库连接类和实体类) 数据库建立 数据库连接类(DBManager) 书籍信息的实体类(Book) 操作 ...

  4. MySQL——数据库的增删改操作

    数据库的增删改操作 数据库的增操作 数据库的增操作主要涉及数据库的增加.数据表的增加.表记录增加以及表字段增加等.数据库的增加非常简单,就是新创建一个数据库:表记录的增加指的就是新增表的数据行,可以是 ...

  5. heidisql连接远程数据库_Heidisql如何连接sql server数据库并做增删改操作?

    Heidisql工具是一个功能强大的数据库连接工具,功能齐全.操作简单.用heidisql很容易完成sql server数据库的建表.删除表.更新表操作等等操作.接下来小编就给大家带来Heidisql ...

  6. mysql 命令行访问_Mysql 命令行模式访问操作mysql数据库操作

    使用环境 在cmd模式下输入 mysql --version (查看mysql安装的版本). 完整的命令可以通过mysql --help来获取. 本测试使用的Mysql版本是mysql5, 本测试使用 ...

  7. python编程小游戏代码-Python小游戏之300行代码实现俄罗斯方块

    前言 本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很 ...

  8. python小游戏源码-Python小游戏之300行代码实现俄罗斯方块

    Python小游戏之300行代码实现俄罗斯方块 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: Python小游戏之300行代码实现俄罗斯方块.txt ] (友情提示:右键点上 ...

  9. Oracle 原理: 视图,对视图进行增删改操作

    Oracle的视图和SQLServer的视图基本一样. 视图,是一个虚拟的表,不会给视图分配存储空间.视图的建立需要依赖于单个或多个普通表,被依赖的普通表就成为"基表".可以就像 ...

最新文章

  1. 无监督学习:从基本概念到四种实现模型
  2. Memory and Trident
  3. SQL Server--[转]SQL Server中临时表与表变量的区别
  4. 内蒙古大学计算机组成原理实验,内蒙古大学计算机组成原理期末练习0
  5. 【转】Dynamics CRM 365零基础入门学习(二)Dynamics 插件注册的基本流程
  6. 当OpenOrg和OpenGov发生冲突时
  7. Android设备上使用WiFinspect抓取网络通讯包
  8. 【报告分享】科技产业2021年投资策略:科技进步与中美再平衡下的新机遇.pdf(附下载链接)...
  9. jQuery修改margin
  10. 软件性能测试——负载测试的最佳实践
  11. 使用PHP和GZip压缩网站JS/CSS文件加速网站访问速度
  12. 【转】深入理解Java:SimpleDateFormat安全的时间格式化
  13. 几万字的博文,你自己会看吗
  14. 现在第9代i7不能安装linux,9代I7的电脑如何重装系统?这可难不倒我,解决一共就八步!...
  15. 线性代数 | (3) 行列式
  16. ng2 绑定输出html,Angular2的数据绑定
  17. 重学 Java 设计模式:实战访问者模式「模拟家长与校长,对学生和老师的不同视角信息的访问场景」
  18. 20180619 Linux 软件包安装和卸载 7.1 - 7.9
  19. Django的数据库创建、连接与迁移
  20. python在windows和linux系统下批量读取grib2数据

热门文章

  1. 克鲁斯卡尔kruskal算法(Java)
  2. ICT产业关联效应的国际比较——基于投入产出的分析
  3. 【254期】这些 SQL 语句真是让我干瞪眼!
  4. 一个圆怎么平分三份_如图,把一个圆分成三等份,请你再设计1-2个不同的方法,把圆分成三等到份.(正确划分一个圆得2分,正确划分二个圆得3分)...
  5. stm32407定义浮点数后进入硬件错误
  6. 「穷人」花钱指南 —— 简要理财
  7. Verilog实现Bresenham任意斜率直线
  8. 概率统计Python计算:单个正态总体均值双侧假设的T检验
  9. 离散数学课程第五章 Enumeration 枚举 总结
  10. 搜狐白社会消息应用: Mochiweb