标签:sharp ram 解决 对象 spl index user count tag
功能:
一.列相关:
1.追加列,左插列,右插列,
2.删除列
二.行相关:
1.追加行,上插行,下插行
2.删除行,删除所有空行,清空所有数据...
原理:根据对鼠标于 DataGridView 点击区域的判断来 对 点击列 或 点击行 的准确定位,再执行操作...
优点:
1.只需要 CellMouseDown 事件所输出的 DataGridViewCellMouseEventArgs 参数来判断,便可取代 通常情况下对行列操作函数所需要输入的 点击列 或 点击行...
2.具有行列相关操作 某些方面 一定的综合性;
缺点:
1.由于其在某些操作方面的综合性,相比专一针对某个列或某行进行操作的函数肯定稍慢..
注明:
1.所提供的函数可能还没有达到所有情况下的测试,但目前本人还没发现出错的地方...
2.新增列操作函数中有可以改进的地方...[相关代码段有注明]
以下是相关代码:
public static partial class Dgv
{
#region 点击行列 基本信息 获取
///
/// 根据鼠标点击的单元格信息,输出 单元格 的作用分类作用区域
/// 注:由于 dgv 的列名行/行标头 都是有不同分工作用的单元格 Cell 组成,所以,以下判断均为判断 点击的 Cell 所在的 行索引与列索引来判断 所属的分类作用区域
/// 时间: 2021/07/02 20:00:58
///
///
///
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);
}
///
/// 根据鼠标点击的单元格信息,输出 单元格 的作用分类作用区域
/// 注:由于 dgv 的列名行/行标头 都是有不同分工作用的单元格 Cell 组成,所以,以下判断均为判断 点击的 Cell 所在的 行索引与列索引来判断 所属的分类作用区域
/// 时间: 2021/07/02 20:00:58
///
///
///
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
/// 根据鼠标点击的单元格信息,输出 单元格 的作用分类作用区域
/// 注:由于 dgv 的列名行/行标头 都是有不同分工作用的单元格 Cell 组成,所以,以下判断均为判断 点击的 Cell 所在的 行索引与列索引来判断 所属的分类作用区域
/// 时间: 2021/07/02 20:00:58
///
///
///
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
/// 根据 _CellMouseDown 判断点击的区域, 获取可能与点击操作相关的列 [如:点击单元格对应的列,直击列名列,反之为 null ]
/// 时间: 2021/07/02 20:00:58
///
///
///
///
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
///
/// [综合情况] 综合处理
/// 时间: 2021/07/02 23:45:58
///
public static class Col2
{
#region
#region [综合情况] 新增列
///
/// [综合情况] 新增列
///
///
///
///
///
///
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
/// [综合情况] 左插列
///
///
///
///
///
public static void Ins(DataGridView dgv, DataGridViewCell insCelTyp, string colNam, DataGridViewCellMouseEventArgs e)
{
New(dgv, insCelTyp, colNam, false, ref e);
}
///
/// [综合情况] 右插列
///
///
///
///
///
public static void Ins_(DataGridView dgv, DataGridViewCell insCelTyp, string colNam, DataGridViewCellMouseEventArgs e)
{
New(dgv, insCelTyp, colNam, true, ref e);
}
///
/// [综合情况] 新增列
///
///
///
///
///
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);
}
///
/// [综合情况] 左插列
///
///
///
///
///
public static void Ins(DataGridView dgv, string colNam, bool insRit, DataGridViewCellMouseEventArgs e)
{
New(dgv, colNam, false,ref e);
}
///
/// [综合情况] 右插列
///
///
///
///
///
public static void Ins_(DataGridView dgv, string colNam, bool insRit, DataGridViewCellMouseEventArgs e)
{
New(dgv, colNam, true, ref e);
}
#endregion
#region [综合情况] 删除列
///
/// [综合情况] 删除列
///
///
///
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
}
///
/// [综合情况] 综合处理
/// 时间: 2021/07/02 23:45:58
///
public static class Row2
{
#region
#region [综合情况] 新增行
///
/// [综合情况] 新增行
///
///
///
///
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
/// [综合情况] 在当前行处插入新行
///
///
///
public static void Ins(DataGridView dgv, ref DataGridViewCellMouseEventArgs e)
{
New(dgv, false,ref e);
}
///
/// [综合情况] 在当前行下面插入新行
///
///
///
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
/// [综合情况] 删除所有空行
///
///
public static void Trm(DataGridView dgv)
{
#region
int row = dgv.Rows.Count;
if (dgv.AllowUserToAddRows)
row--;
if (row -1; i--)
{
dgvR = dgv.Rows[i];
for (j = 0; j -1; i--)
{
dr = dt.Rows[i];
for (j = 0; j
/// [综合情况] 清空所有行
///
///
public static void Clr(DataGridView dgv)
{
#region
int row = dgv.Rows.Count;
if (dgv.AllowUserToAddRows)
row--;
if (row
/// [综合情况] 清空所有数据
///
///
public static void Nul(DataGridView dgv)
{
#region
int row = dgv.Rows.Count;
if (dgv.AllowUserToAddRows)
row--;
if (row -1; i--)
{
dgvR = dgv.Rows[i];
for (j = 0; j -1; i--)
{
dr = dt.Rows[i];
for (j = 0; j
交流 QQ : 2412366909@qq.com
手机号码:177-7499-4428
C# DataGridView 新增列 新增行 操作函数 - [ 自律相互分享,共促一起进步 - 社会的正常运维就这么简单,何以权,何以钱...- 张光荣说的正能量]
标签:sharp ram 解决 对象 spl index user count tag
原文地址:https://www.cnblogs.com/grCod/p/14965377.html