using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace ExtraLib.Handle
{
public static class DataGridViewHandle
{
/// <summary>
/// 数据表控件初始化
/// </summary>
/// <param name="dgv"></param>
/// <param name="headerList"></param>
/// <param name="editMode"></param>
public static void Init(DataGridView dgv, string[] headerList, DataGridViewEditMode editMode = DataGridViewEditMode.EditProgrammatically)
{
if (headerList != null && headerList.Length > 0)
{
dgv.Columns.Clear();
foreach (var header in headerList)
{
var dgvc = new DataGridViewColumn
{
Name = header,
HeaderText = header,
AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,
SortMode = DataGridViewColumnSortMode.Automatic,
CellTemplate = new DataGridViewTextBoxCell(),
};
dgv.Columns.Add(dgvc);
}
}
else
{
foreach (DataGridViewColumn column in dgv.Columns)
{
column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
column.SortMode = DataGridViewColumnSortMode.Automatic;
}
}
Init(dgv, editMode);
}
/// <summary>
/// 数据表控件参数配置
/// </summary>
/// <param name="dgv"></param>
/// <param name="editMode">单元格编辑模式</param>
/// <param name="selectionMode">默认整行选中模式</param>
/// <param name="allowUserToAddRows">不允许用户新增行(可控制控件新增)</param>
/// <param name="allowUserToResizeRows">不允许用户调整行高</param>
/// <param name="allowUserToResizeColumns">不允许用户调整列宽</param>
public static void Init(DataGridView dgv, DataGridViewEditMode editMode,
bool allowUserToAddRows = false,
bool allowUserToResizeRows = false,
bool allowUserToResizeColumns = true,
DataGridViewSelectionMode selectionMode = DataGridViewSelectionMode.FullRowSelect
)
{
dgv.EditMode = editMode;
dgv.AllowUserToAddRows = allowUserToAddRows;
dgv.AllowUserToResizeRows = allowUserToResizeRows;
dgv.AllowUserToResizeColumns = allowUserToResizeColumns;
dgv.SelectionMode = selectionMode;
dgv.RowHeadersVisible = false;
}
/// <summary>
/// 数据表控件添加行(数据与列数不符时直接返回)
/// </summary>
/// <param name="dgv"></param>
/// <param name="data"></param>
public static void AddRow(DataGridView dgv, object[] data)
{
if (dgv.ColumnCount != data.Length) return;
var index = dgv.Rows.Add();
var row = dgv.Rows[index];
for (var i = 0; i < data.Length; i++)
{
row.Cells[i].Value = data[i];
}
}
/// <summary>
/// 编辑数据表行,若列和数据数目不匹配则直接返回
/// </summary>
/// <param name="row"></param>
/// <param name="data"></param>
public static void ModifyRow(DataGridViewRow row, object[] data)
{
if (row.Cells.Count != data.Length) return;
for (var i = 0; i < data.Length; i++)
{
row.Cells[i].Value = data[i];
}
}
/// <summary>
/// 将指定列项变更为特定单元格
/// </summary>
/// <param name="dgv"></param>
/// <param name="columnName"></param>
/// <param name="cell"></param>
public static void FillCell(DataGridView dgv, string columnName, DataGridViewCell cell)
{
foreach (DataGridViewRow dgvRow in dgv.Rows)
{
var dgvCell = (DataGridViewCell)cell.Clone();
dgvRow.Cells[columnName] = dgvCell;
}
}
/// <summary>
/// 在指定列序号插入下拉菜单
/// </summary>
/// <param name="dgv"></param>
/// <param name="columnName"></param>
/// <param name="items"></param>
/// <param name="order"></param>
public static void AddComboBoxColumn(DataGridView dgv, string columnName, object[] items, int order)
{
var dgvc = new DataGridViewComboBoxColumn
{
DataSource = items,
HeaderText = columnName,
Name = columnName,
DisplayIndex = order,
DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton,
AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
};
dgv.Columns.Add(dgvc);
}
/// <summary>
/// 将指定列项变更为下拉菜单
/// </summary>
/// <param name="dgv"></param>
/// <param name="columnName"></param>
/// <param name="items"></param>
public static void ModifyComboBoxCell(DataGridView dgv, string columnName, object[] items)
{
FillCell(
dgv,
columnName,
new DataGridViewComboBoxCell
{
DataSource = items,
DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton
});
}
/// <summary>
/// 清空所有数据
/// </summary>
/// <param name="dgv"></param>
public static void Clear(DataGridView dgv)
{
dgv.Rows.Clear();
}
/// <summary>
/// 取消所有选中行
/// </summary>
/// <param name="dgv"></param>
public static void ClearSelected(DataGridView dgv)
{
for (var i = 0; i < dgv.SelectedRows.Count; i++)
{
dgv.SelectedRows[i].Selected = false;
}
}
/// <summary>
/// 删除所有选中行
/// </summary>
/// <param name="dgv"></param>
public static void DeleteSelected(DataGridView dgv)
{
for (var i = 0; i < dgv.SelectedRows.Count; i++)
{
dgv.Rows.Remove(dgv.SelectedRows[i]);
}
}
/// <summary>
/// 刷新数据表
/// </summary>
/// <param name="dgv"></param>
/// <param name="dt"></param>
public static void Refresh(DataGridView dgv, DataTable dt)
{
if (dgv.Columns.Count == 0)
{
dgv.DataSource = dt;
}
else
{
dgv.Rows.Clear();
foreach (DataRow row in dt.Rows)
{
var dgvRow = dgv.Rows[dgv.Rows.Add()];
foreach (DataColumn col in dt.Columns)
{
dgvRow.Cells[col.ColumnName] = new DataGridViewTextBoxCell { Value = row[col.ColumnName] };
}
}
}
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader;
}
/// <summary>
/// 获取鼠标点击行索引
/// </summary>
/// <param name="dgv"></param>
/// <param name="e"></param>
/// <returns></returns>
public static int GetMouseClickRowIndex(DataGridView dgv, MouseEventArgs e)
{
var firstRowIndex = dgv.FirstDisplayedScrollingRowIndex;
if (firstRowIndex < 0) return -1; // 没有数据
if (dgv.ColumnHeadersVisible && e.Y <= dgv.ColumnHeadersHeight) return -1; // 标题行内
for (var i = firstRowIndex; i < dgv.RowCount; i++)
{
if (!dgv.Rows[i].Visible) continue;
var rect = dgv.GetRowDisplayRectangle(i, true);
if (rect.Top <= e.Y && e.Y < rect.Bottom) return i; // 在范围内则返回
}
return -1;
}
/// <summary>
/// 数据表控件菜单初始化,若菜单名列表与方法列表数量不一致则直接退出
/// </summary>
/// <param name="dgv"></param>
/// <param name="names"></param>
/// <param name="handlers"></param>
public static void MenuInit(DataGridView dgv, string[] names, EventHandler[] handlers)
{
if (names.Length != handlers.Length) return;
dgv.ContextMenuStrip = dgv.ContextMenuStrip ?? new ContextMenuStrip();
dgv.ContextMenuStrip.Items.Clear();
for (var i = 0; i < names.Length; i++)
{
dgv.ContextMenuStrip.Items.Add(names[i], null, handlers[i]);
}
}
/// <summary>
/// 菜单初始化重载,可以设置菜单图标
/// </summary>
/// <param name="dgv"></param>
/// <param name="names"></param>
/// <param name="handlers"></param>
/// <param name="images"></param>
public static void MenuInit(DataGridView dgv, string[] names, EventHandler[] handlers, Image[] images)
{
var a = names.Length;
var b = handlers.Length;
var c = images.Length;
if (a != b || b != c || a != c) return;
dgv.ContextMenuStrip = dgv.ContextMenuStrip ?? new ContextMenuStrip();
dgv.ContextMenuStrip.Items.Clear();
for (var i = 0; i < names.Length; i++)
{
dgv.ContextMenuStrip.Items.Add(names[i], images[i], handlers[i]);
}
}
}
}
DataGridViewHandle
最新推荐文章于 2021-04-07 11:30:53 发布