C# DataGridView 新增列 新增行 操作函数 - [ 自律相互分享,共促一起进步 - 社会的正常运维就这么简单,何以权,何以钱...- 张光荣2010年谈社会改正提出的正能量]
功能:
一.列相关:
1.追加列,左插列,右插列,
2.删除列
二.行相关:
1.追加行,上插行,下插行
2.删除行,删除所有空行,清空所有数据...
原理:根据对鼠标于 DataGridView 点击区域的判断来 对 点击列 或 点击行 的准确定位,再执行操作...
优点:
1.只需要 CellMouseDown 事件所输出的 DataGridViewCellMouseEventArgs 参数来判断,便可取代 通常情况下对行列操作函数所需要输入的 点击列 或 点击行...
2.具有行列相关操作 某些方面 一定的综合性;
缺点:
1.由于其在某些操作方面的综合性,相比专一针对某个列或某行进行操作的函数肯定稍慢..
注明:
1.所提供的函数可能还没有达到所有情况下的测试,但目前本人还没发现出错的地方...
2.新增列操作函数中有可以改进的地方...[相关代码段有注明]
以下是相关代码:
- public static partial class Dgv
- {
- #region 点击行列 基本信息 获取
- /// <summary>
- /// 根据鼠标点击的单元格信息,输出 单元格 的作用分类作用区域
- /// 注:由于 dgv 的列名行/行标头 都是有不同分工作用的单元格 Cell 组成,所以,以下判断均为判断 点击的 Cell 所在的 行索引与列索引来判断 所属的分类作用区域
- /// 时间: 2021/07/02 20:00:58
- /// </summary>
- /// <param name="e"></param>
- /// <returns></returns>
- public static EAra _CellMouseDown(object s, DataGridViewCellMouseEventArgs e, out DataGridViewColumn clkDgvC, out DataGridViewRow clkDgvR, out DataGridViewCell clkDgvc)
- {
- DataGridView dgv = s as DataGridView;
- return _CellMouseDown(dgv, e, out clkDgvC, out clkDgvR, out clkDgvc);
- }
- /// <summary>
- /// 根据鼠标点击的单元格信息,输出 单元格 的作用分类作用区域
- /// 注:由于 dgv 的列名行/行标头 都是有不同分工作用的单元格 Cell 组成,所以,以下判断均为判断 点击的 Cell 所在的 行索引与列索引来判断 所属的分类作用区域
- /// 时间: 2021/07/02 20:00:58
- /// </summary>
- /// <param name="e"></param>
- /// <returns></returns>
- public static EAra _CellMouseDown(DataGridView dgv, DataGridViewCellMouseEventArgs e, out DataGridViewColumn clkDgvC, out DataGridViewRow clkDgvR, out DataGridViewCell clkDgvc)
- {
- #region
- clkDgvC = null;
- clkDgvR = null;
- clkDgvc = null;
- EAra eAra = EAra.non;
- if (e == null)
- eAra = EAra.all;
- else
- {
- #region
- int iRow = e.RowIndex;
- int iCol = e.ColumnIndex;
- if (iRow < 0)
- {
- #region
- if (iCol < 0)
- eAra = EAra.all;
- else
- {
- eAra = EAra.col;
- clkDgvC = dgv.Columns[iCol];
- }
- #endregion
- }
- else if (iCol < 0)
- {
- eAra = EAra.row;
- clkDgvR = dgv.Rows[iRow];//.CurrentRow;
- }
- else
- {
- eAra = EAra.cel;
- clkDgvc = dgv.Rows[iRow].Cells[iCol];//.CurrentCell;
- }
- #endregion
- }
- return eAra;
- #endregion
- }
- /// <summary>
- /// 根据鼠标点击的单元格信息,输出 单元格 的作用分类作用区域
- /// 注:由于 dgv 的列名行/行标头 都是有不同分工作用的单元格 Cell 组成,所以,以下判断均为判断 点击的 Cell 所在的 行索引与列索引来判断 所属的分类作用区域
- /// 时间: 2021/07/02 20:00:58
- /// </summary>
- /// <param name="e"></param>
- /// <returns></returns>
- public static EAra _CellMouseDown(DataGridViewCellMouseEventArgs e)
- {
- #region
- EAra eAra = EAra.non;
- if (e == null)
- eAra = EAra.all;
- else
- {
- #region
- int iRow = e.RowIndex;
- int iCol = e.ColumnIndex;
- if (iRow < 0)
- {
- #region
- if (iCol < 0)
- eAra = EAra.all;
- else
- eAra = EAra.col;
- #endregion
- }
- else if (iCol < 0)
- eAra = EAra.row;
- else
- eAra = EAra.cel;
- #endregion
- }
- return eAra;
- #endregion
- }
- /// <summary>
- /// 根据 _CellMouseDown 判断点击的区域, 获取可能与点击操作相关的列 [如:点击单元格对应的列,直击列名列,反之为 null ]
- /// 时间: 2021/07/02 20:00:58
- /// </summary>
- /// <param name="dgv"></param>
- /// <param name="e"></param>
- /// <param name="clkDgvC"></param>
- public static void ClkDgvC(DataGridView dgv, DataGridViewCellMouseEventArgs e, out DataGridViewColumn clkDgvC)
- {
- #region
- clkDgvC = null;
- DataGridViewRow clkDgvR = null;
- DataGridViewCell clkDgvc = null;
- EAra eAra = _CellMouseDown(dgv, e, out clkDgvC, out clkDgvR, out clkDgvc);
- if (eAra == EAra.all || eAra == EAra.non)
- return;
- if (clkDgvR != null)
- return;
- if (clkDgvC == null)
- {
- if (clkDgvc == null)
- return;
- clkDgvC = clkDgvc.OwningColumn;
- }
- #endregion
- }
- #endregion
- /// <summary>
- /// [综合情况] 综合处理
- /// 时间: 2021/07/02 23:45:58
- /// </summary>
- public static class Col2
- {
- #region
- #region [综合情况] 新增列
- /// <summary>
- /// [综合情况] 新增列
- /// </summary>
- /// <param name="dgv"></param>
- /// <param name="insCelTyp"></param>
- /// <param name="colNam"></param>
- /// <param name="insRit"></param>
- /// <param name="e"></param>
- public static void New(DataGridView dgv, DataGridViewCell insCelTyp, string colNam, bool insRit, ref DataGridViewCellMouseEventArgs e)
- {
- #region
- #region
- DataGridViewColumn clkDgvC = null;
- ClkDgvC(dgv, e, out clkDgvC);
- int cnt = dgv.ColumnCount;
- cnt++;
- if (colNam == "")
- colNam = "F" + cnt;
- int dspIdx = -1;
- if (clkDgvC == null)
- dspIdx = cnt;
- else
- {
- dspIdx = clkDgvC.DisplayIndex;
- if (insRit)
- dspIdx++;
- }
- #endregion
- #region
- object obj = dgv.DataSource;
- if (obj == null)
- {
- #region
- if (insCelTyp == null)
- insCelTyp = Col.ETyp.cTxt;
- DataGridViewColumn dgvC = new DataGridViewColumn(insCelTyp);
- dgvC.SortMode = DataGridViewColumnSortMode.Automatic;
- dgvC.HeaderText = colNam;
- dgv.Columns.Add(dgvC);
- dgvC.DisplayIndex = dspIdx;
- #endregion
- }
- else
- {
- #region
- string typ = obj.GetType().Name;
- if (typ == EDat.DataTable + "")
- {
- #region
- #region 操作 DataTable 对象
- DataGridViewColumn dgvC;
- #region 以下包含代码可能有别的解决方法,此不临时替代
- #region 记录加列前的列的 显序
- int[] dspIdxS = new int[cnt];
- for (int i = 0; i < cnt - 1; i++)
- {
- dgvC = dgv.Columns[i];
- dspIdxS[i] = dgvC.DisplayIndex;
- }
- #endregion
- #region 注:以上代码可能会自动打乱原列 显序
- DataTable dt = obj as DataTable;
- DT.Col.Add(dt, colNam);
- #endregion
- #region 还原加列前的列的 显序
- for (int i = 0; i < cnt - 1; i++)
- {
- dgvC = dgv.Columns[i];
- dgvC.DisplayIndex = dspIdxS[i];
- }
- #endregion
- #endregion
- #endregion
- if (clkDgvC != null)
- {
- #region
- cnt--;
- dgvC = dgv.Columns[cnt];
- dgvC.SortMode = DataGridViewColumnSortMode.Automatic;
- dgvC.DisplayIndex = dspIdx;
- #endregion
- }
- #endregion
- }
- #endregion
- }
- #endregion
- #endregion
- }
- /// <summary>
- /// [综合情况] 左插列
- /// </summary>
- /// <param name="dgv"></param>
- /// <param name="insCelTyp"></param>
- /// <param name="colNam"></param>
- /// <param name="e"></param>
- public static void Ins(DataGridView dgv, DataGridViewCell insCelTyp, string colNam, DataGridViewCellMouseEventArgs e)
- {
- New(dgv, insCelTyp, colNam, false, ref e);
- }
- /// <summary>
- /// [综合情况] 右插列
- /// </summary>
- /// <param name="dgv"></param>
- /// <param name="insCelTyp"></param>
- /// <param name="colNam"></param>
- /// <param name="e"></param>
- public static void Ins_(DataGridView dgv, DataGridViewCell insCelTyp, string colNam, DataGridViewCellMouseEventArgs e)
- {
- New(dgv, insCelTyp, colNam, true, ref e);
- }
- /// <summary>
- /// [综合情况] 新增列
- /// </summary>
- /// <param name="dgv"></param>
- /// <param name="colNam"></param>
- /// <param name="insRit"></param>
- /// <param name="e"></param>
- public static void New(DataGridView dgv, string colNam, bool insRit,ref DataGridViewCellMouseEventArgs e)
- {
- DataGridViewCell insCelTyp = Col.ETyp.cTxt;
- New(dgv, insCelTyp, colNam, insRit, ref e);
- }
- /// <summary>
- /// [综合情况] 左插列
- /// </summary>
- /// <param name="dgv"></param>
- /// <param name="colNam"></param>
- /// <param name="insRit"></param>
- /// <param name="e"></param>
- public static void Ins(DataGridView dgv, string colNam, bool insRit, DataGridViewCellMouseEventArgs e)
- {
- New(dgv, colNam, false,ref e);
- }
- /// <summary>
- /// [综合情况] 右插列
- /// </summary>
- /// <param name="dgv"></param>
- /// <param name="colNam"></param>
- /// <param name="insRit"></param>
- /// <param name="e"></param>
- public static void Ins_(DataGridView dgv, string colNam, bool insRit, DataGridViewCellMouseEventArgs e)
- {
- New(dgv, colNam, true, ref e);
- }
- #endregion
- #region [综合情况] 删除列
- /// <summary>
- /// [综合情况] 删除列
- /// </summary>
- /// <param name="dgv"></param>
- /// <param name="e"></param>
- public static void Del(DataGridView dgv, DataGridViewCellMouseEventArgs e)
- {
- #region
- DataGridViewColumn clkDgvC = null;
- ClkDgvC(dgv, e, out clkDgvC);
- if (clkDgvC == null)
- return;
- object obj = dgv.DataSource;
- if (obj == null)
- dgv.Columns.Remove(clkDgvC);
- else
- {
- string typ = obj.GetType().Name;
- if (typ == EDat.DataTable + "")
- {
- int colIdx = clkDgvC.Index;
- DataTable dt = obj as DataTable;
- dt.Columns.RemoveAt(colIdx);
- }
- }
- #endregion
- }
- #endregion
- #endregion
- }
- /// <summary>
- /// [综合情况] 综合处理
- /// 时间: 2021/07/02 23:45:58
- /// </summary>
- public static class Row2
- {
- #region
- #region [综合情况] 新增行
- /// <summary>
- /// [综合情况] 新增行
- /// </summary>
- /// <param name="dgv"></param>
- /// <param name="insDwn"></param>
- /// <param name="e"></param>
- public static void New(DataGridView dgv, bool insDwn, ref DataGridViewCellMouseEventArgs e)
- {
- #region
- #region
- DataGridViewColumn clkDgvC;
- DataGridViewRow clkDgvR;
- DataGridViewCell clkDgvc;
- _CellMouseDown(dgv, e, out clkDgvC, out clkDgvR, out clkDgvc);
- #endregion
- #region
- int row = dgv.Rows.Count;
- bool bol = dgv.AllowUserToAddRows;
- if (bol)
- row--;
- int insIdx = -1;
- if (clkDgvR == null)
- insIdx = row;// --row;
- else
- {
- insIdx = clkDgvR.Index;
- if (insDwn)
- insIdx++;
- else
- {
- #region 此码作用于 能在 点击行处 连续 添加
- MouseEventArgs mse = new MouseEventArgs(MouseButtons.Left, 1, 1, 1, 0);
- e = new DataGridViewCellMouseEventArgs(e.ColumnIndex, insIdx + 1, e.Location.X, e.Location.Y, mse);
- #endregion
- }
- }
- #endregion
- #region
- object obj = dgv.DataSource;
- if (obj == null)
- {
- #region
- if (insIdx < row)
- dgv.Rows.Insert(insIdx, 1);
- else
- dgv.Rows.Add();
- #endregion
- }
- else
- {
- #region
- string typ = obj.GetType().Name;
- if (typ == EDat.DataTable + "")
- {
- #region
- DataTable dt = obj as DataTable;
- if (insIdx < row)
- {
- DataRow dr = dt.NewRow();
- dt.Rows.InsertAt(dr, insIdx);
- }
- else
- dt.Rows.Add();
- #endregion
- }
- #endregion
- }
- #endregion
- #endregion
- }
- /// <summary>
- /// [综合情况] 在当前行处插入新行
- /// </summary>
- /// <param name="dgv"></param>
- /// <param name="e"></param>
- public static void Ins(DataGridView dgv, ref DataGridViewCellMouseEventArgs e)
- {
- New(dgv, false,ref e);
- }
- /// <summary>
- /// [综合情况] 在当前行下面插入新行
- /// </summary>
- /// <param name="dgv"></param>
- /// <param name="e"></param>
- public static void Ins_(DataGridView dgv,ref DataGridViewCellMouseEventArgs e)
- {
- New(dgv, true,ref e);
- }
- #endregion
- #region [综合情况] 删除行
- public static void Del(DataGridView dgv,ref DataGridViewCellMouseEventArgs e)
- {
- #region
- #region
- DataGridViewColumn clkDgvC;
- DataGridViewRow clkDgvR;
- DataGridViewCell clkDgvc;
- _CellMouseDown(dgv, e, out clkDgvC, out clkDgvR, out clkDgvc);
- if (clkDgvR == null)
- return;
- #endregion
- #region
- int rowIdx = clkDgvR.Index;
- bool bol = dgv.AllowUserToAddRows;
- int cnt = dgv.Rows.Count;
- if (bol)
- {
- cnt--;
- if (rowIdx == cnt)
- return;
- }
- #endregion
- #region
- object obj = dgv.DataSource;
- if (obj == null)
- dgv.Rows.RemoveAt(rowIdx);
- else
- {
- #region
- string typ = obj.GetType().Name;
- if (typ == EDat.DataTable + "")
- {
- DataTable dt = obj as DataTable;
- dt.Rows.RemoveAt(rowIdx);
- }
- #endregion
- }
- cnt--;
- if (cnt < 1)
- {
- MouseEventArgs mse = new MouseEventArgs(MouseButtons.Left, 1, 1, 1, 0);
- e = new DataGridViewCellMouseEventArgs(e.ColumnIndex, -1, e.Location.X, e.Location.Y, mse);
- }
- #endregion
- #endregion
- }
- #endregion
- #region [综合情况] 删除所有空行
- /// <summary>
- /// [综合情况] 删除所有空行
- /// </summary>
- /// <param name="dgv"></param>
- public static void Trm(DataGridView dgv)
- {
- #region
- int row = dgv.Rows.Count;
- if (dgv.AllowUserToAddRows)
- row--;
- if (row < 1)
- return;
- row--;
- int j;
- int col = dgv.Columns.Count;
- #endregion
- #region
- string vlu;
- object obj = dgv.DataSource;
- if(obj==null)
- {
- #region
- DataGridViewRow dgvR;
- DataGridViewCell dgvc;
- for (int i = row; i > -1; i--)
- {
- dgvR = dgv.Rows[i];
- for (j = 0; j < col; j++)
- {
- dgvc = dgvR.Cells[j];
- vlu = dgvc.Value.ToString();
- if (vlu != "")// dgvc.Value != null)
- break;
- }
- if (j < col)
- continue;
- dgvR = null;
- dgv.Rows.RemoveAt(i);
- }
- #endregion
- }
- else
- {
- string typ = obj.GetType().Name;
- if(typ==EDat.DataTable+"")
- {
- #region
- DataTable dt = obj as DataTable;
- DataRow dr;
- for (int i = row; i > -1; i--)
- {
- dr = dt.Rows[i];
- for (j = 0; j < col; j++)
- {
- vlu = dr[j] + "";
- if (vlu != "")
- break;
- }
- if (j < col)
- continue;
- dr = null;
- dt.Rows.RemoveAt(i);
- }
- #endregion
- }
- }
- #endregion
- }
- #endregion
- #region [综合情况] 清空所有行
- /// <summary>
- /// [综合情况] 清空所有行
- /// </summary>
- /// <param name="dgv"></param>
- public static void Clr(DataGridView dgv)
- {
- #region
- int row = dgv.Rows.Count;
- if (dgv.AllowUserToAddRows)
- row--;
- if (row < 1)
- return;
- row--;
- #endregion
- #region
- object obj = dgv.DataSource;
- if (obj == null)
- dgv.Rows.Clear();
- else
- {
- string typ = obj.GetType().Name;
- if (typ == EDat.DataTable + "")
- {
- #region
- DataTable dt = obj as DataTable;
- dt.Rows.Clear();
- #endregion
- }
- }
- #endregion
- }
- #endregion
- #region [综合情况] 清空所有数据
- /// <summary>
- /// [综合情况] 清空所有数据
- /// </summary>
- /// <param name="dgv"></param>
- public static void Nul(DataGridView dgv)
- {
- #region
- int row = dgv.Rows.Count;
- if (dgv.AllowUserToAddRows)
- row--;
- if (row < 1)
- return;
- row--;
- int j;
- int col = dgv.Columns.Count;
- #endregion
- #region
- object obj = dgv.DataSource;
- if (obj == null)
- {
- #region
- DataGridViewRow dgvR;
- DataGridViewCell dgvc;
- for (int i = row; i > -1; i--)
- {
- dgvR = dgv.Rows[i];
- for (j = 0; j < col; j++)
- {
- dgvc = dgvR.Cells[j];
- if (dgvc.Value == null)
- continue;
- dgvc.Value = "";
- }
- }
- #endregion
- }
- else
- {
- string typ = obj.GetType().Name;
- if (typ == EDat.DataTable + "")
- {
- #region
- DataTable dt = obj as DataTable;
- DataRow dr;
- for (int i = row; i > -1; i--)
- {
- dr = dt.Rows[i];
- for (j = 0; j < col; j++)
- {
- obj = dr[j];
- if (obj == null)
- continue;
- dr[j] = "";
- }
- }
- #endregion
- }
- }
- #endregion
- }
- #endregion
- #endregion
- }
- }
交流 QQ : 2412366909@qq.com
手机号码:177-7499-4428
C# DataGridView 新增列 新增行 操作函数 - [ 自律相互分享,共促一起进步 - 社会的正常运维就这么简单,何以权,何以钱...- 张光荣2010年谈社会改正提出的正能量]的更多相关文章
- DataGridView控件的各种操作总结
一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index ...
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index ...
- 转:c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index ...
- (转)实现DataList的分页 新增列
前几天在做网上商城,要展示商品信息(有图片,有文字),DataView虽然可以分页,但它的缺点是不能自定义显示格式.而DataList解决了它的缺点,但DataList本身却不能分页.很是头痛,于是在 ...
- IDEA04 工具窗口管理、各种跳转、高效定位、行操作、列操作、live template、postfix、alt enter、重构、git使用
1 工具窗口管理 所有的窗口都是在view -> tools windows 下面的,这些窗口可以放在IDEA的上下左右各个位置:右键某个窗口后选择move to 即可进行位置调整 2 跳转 2 ...
- 在 Bootstraptable 插件基础上新增可编辑行
http://www.tuicool.com/articles/YbEVv2v 为什么调用 bootstraptable 原生方法会有问题 首先我必须肯定, bootstraptable 是一款很强大 ...
- 使用 PIVOT 和 UNPIVOT 行转列 列转行 报表统计 函数
官方文档:http://technet.microsoft.com/zh-cn/library/ms177410(v=SQL.105).aspx 可以使用 PIVOT 和 UNPIVOT 关系运算符将 ...
- Oracle行转列(使用pivot函数)
在日常使用中,经常遇到这样的情况,需要将数据库中行转化成列显示,如 转化为 这个时候,我们就需要使用pivot函数 百度后,参考网址http://www.2cto.com/database/20150 ...
- DB2行转列、列转行等操作
DB2 行转列 ----start 在网上看到这样一个问题:(问题地址:http://www.mydb2.cn/bbs/read.php?tid=1297&page=e&#a) 班级 ...
- 大数据学习day28-----hive03------1. null值处理,子串,拼接,类型转换 2.行转列,列转行 3. 窗口函数(over,lead,lag等函数) 4.rank(行号函数)5. json解析函数 6.jdbc连接hive,企业级调优
1. null值处理,子串,拼接,类型转换 (1) 空字段赋值(null值处理) 当表中的某个字段为null时,比如奖金,当你要统计一个人的总工资时,字段为null的值就无法处理,这个时候就可以使用N ...
随机推荐
- Android Studio打开现有的项目,Android自带的类、函数(方法)属性等爆红,含解决方式
如上图,Android 自带的 setContentView 爆红,XML文件内 android:相关的属性(如android:layout_width) 爆红 原因: 使用Android Studi ...
- 移动端性能测试--CPU资源
一.背景 在很多场景下我们去使用 App,可能会碰到手机会出现发热发烫的现象.这是因为 CPU 使用率过高.CPU 过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差,也容易引起 ...
- Job for nfs-server.service failed because the control process exited with error code. See "systemctl status nfs-server.service" and "journalctl -xe" for details.
问题: 解决:
- Joseph Problem With Passwords In Java
问题描述: 编号为1,2,......,n的n个人(每个人的信息有编号.姓名和密码三项)按照顺时针方向围坐一圈, 每个人有且只有一个密码(正整数,密码用随机方式赋值,范围1-15).一开始任选一个正整 ...
- js判断当值的比较小的背景为红色
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- React如何修改props && 子组件调用父组件方法
/** * 子组件如何更改父组件的state呢? * 父组件传递下来的props不满足要求,往往需要修改 * * * Author: shujun * Date: 2020-10-25 */ impo ...
- canvas合并图片并长按保存
代码实现 <div class="pho-bg"> <img src="../../assets/images/FeedbackActivity/pos ...
- python 快速搭建局域网文件服务器 SimpleHTTPServer http.server
py2: python2 -m SimpleHTTPServer [port] py3: python3 -m http.server [port] python2请注意大小写. 在Windows ...
- HCIP-进阶实验02-ISIS协议部署
进阶实验02-ISIS协议部署 1 实验需求 设备 接口 IP地址 备注 R1 G0/0/0 10.1.123.1/24 R2 G0/0/0 10.1.123.2/24 G0/0/1 10.1.24. ...
- Typora的下载和MarkDown的相关操作
MarkDown 作为程序员就要会写blog(网络日记),那么怎么让你的笔记写的排版舒适清晰?我们可以通过MarkDown来写笔记 首先我们要下载Typora,因为现在官网的Typora要付费,所以可 ...