DataGridView添加右键菜单等技巧
1). 添加一个快捷菜单contextMenuStrip1;
2). 给dataGridView1的CellMouseDown事件添加处理程序:
{
if (e.Button == MouseButtons.Right)
{
if (e.RowIndex >= 0)
{
//若行已是选中状态就不再进行设置
if (dataGridView1.Rows[e.RowIndex].Selected == false)
{
dataGridView1.ClearSelection();
dataGridView1.Rows[e.RowIndex].Selected = true;
}
//只选中一行时设置活动单元格
if (dataGridView1.SelectedRows.Count == 1)
{
dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
}
//弹出操作菜单
contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
}
}
}
效果图:
2).复制选中单元格的内容到剪贴板
3).只显示自定义列
4).显示图片
通常,我们将图片路径保存在数据库中,但在dataGridView1中要显示图片,可以进行如下操作:
①.添加一个DataGridViewTextBoxColumn类型的列,Name=Path,DataPropertyName=Pic,Visible=False;
②.添加一个DataGridViewImageColumn类型的列,Name=Pic;
③.dataGridView1控件DataBindingComplete事件处理程序如下:
{
Image image1 = null;
Image image2 = null;
string path = string.Empty;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
path = @"F:\" + dataGridView1.Rows[i].Cells["Path"].Value;
if (File.Exists(path))
{
image1 = Image.FromFile(path);
image2 = new Bitmap(image1, 120, 120);//重设大小
dataGridView1.Rows[i].Cells["Pic"].Value = image2;
//((DataGridViewImageCell)dataGridView1.Rows[i].Cells["Pic"]).Value = image2;
}
}
}
5).当网格未填充满控件时,画线来填充空白区域
/// 绘制网格填充空白区域
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
DataGridView myDataGridView = (DataGridView)sender;
if (myDataGridView.Rows.Count > 0)
{
int i = myDataGridView.ColumnHeadersHeight;//标题行高
int j = myDataGridView.Rows.GetRowsHeight(DataGridViewElementStates.Visible); //所有可见行总高
int k = myDataGridView.Height; //控件高度
int l = myDataGridView.Rows.GetLastRow(DataGridViewElementStates.Visible);//最后一行索引
int count = myDataGridView.Columns.Count;//列总数
int width = 0;
//当网格未充满控件时才画线
if (i + j < k)
{
using (Brush gridBrush = new SolidBrush(myDataGridView.GridColor))
{
using (Pen gridLinePen = new Pen(gridBrush))
{
//处理标题列
if (myDataGridView.RowHeadersVisible)
{
width = myDataGridView.RowHeadersWidth;
e.Graphics.DrawLine(gridLinePen, width, i + j, width, k);
}
else
{
width = 1;
}
//处理正常列
for (int index = 0; index < count; index++)
{
if (myDataGridView.Columns[index].Visible)
{
width += myDataGridView.Columns[index].Width;
e.Graphics.DrawLine(gridLinePen, width, i + j, width, k);
}
}
}
}
}
}
}
6).自定义列宽
手动添加列,再在编辑列界面中逐个设置宽度。注意AutoSizeColumnsMode的值必须为DataGridViewAutoSizeColumnsMode.None,否则自定义宽度不能生效!
7).单元格内容格式化
{
DataGridView myDataGridView = (DataGridView)sender;
if (myDataGridView.Columns["ID"].Index == e.ColumnIndex)
{
if(e.Value != null && !string.IsNullOrEmpty(e.Value.ToString()))
e.Value = "BH" + string.Format("{0:D8}", int.Parse(e.Value.ToString()));
}
}
8).打造一个漂亮的DataGridView
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;//列宽不自动调整,手工添加列
dataGridView1.RowHeadersWidth = 12;//行标题宽度固定12
dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;//不能用鼠标调整列标头宽度
dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.LemonChiffon;//奇数行背景色
dataGridView1.BackgroundColor = Color.White;//控件背景色
dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//列标题居中显示
dataGridView1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//单元格内容居中显示
//行为
dataGridView1.AutoGenerateColumns = false;//不自动创建列
dataGridView1.AllowUserToAddRows = false;//不启用添加
dataGridView1.ReadOnly = true;//不启用编辑
dataGridView1.AllowUserToDeleteRows = false;//不启用删除
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;//单击单元格选中整行
dataGridView1.MultiSelect = false;//不能多选
9).判断有无滚动条
if (dataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.None) > dataGridView1.Height)
MessageBox.Show("有");
else
MessageBox.Show("无");
//水平滚动条
if(dataGridView1.Columns.GetColumnsWidth(DataGridViewElementStates.None) > dataGridView1.Width)
MessageBox.Show("有");
else
MessageBox.Show("无");
10).为什么列标题总不居中?
已经将列标题默认对齐方式设置为居中:
但实际的效果总是偏左了一点,原因是列可以进行排序,排序标志符号在列标题上占了空间。逐列按下边设置可去掉:
转载于:https://www.cnblogs.com/lgx5/p/7041289.html
DataGridView添加右键菜单等技巧相关推荐
- C# winforms datagridview 设置右键菜单【完整版】
在程序开发当中有时候需要在DataGridView的数据行上添加右键菜单,总结了一下网上的例子,记录如下 步骤一:编辑右键菜单 1.创建窗体文件,拖入DataGridView,拖入一个contextM ...
- 在(CListView)列表视图中添加右键菜单的方法
使用弹出式菜单(PopMenu) 弹 出式菜单(PopMenu)大家都熟悉,在WIN98的桌面上单击鼠标右键弹出的菜单就是弹出式菜单.通常情况下,弹出式菜单在鼠标右键单击时弹出,当 然,也可以根据需要 ...
- java 右键菜单_界面操作--添加右键菜单
[java]代码库package 添加右键菜单; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; impor ...
- ListCtrl添加右键菜单(ListCtrl类里编辑,给ListCtrl 发送NM_RCLICK消息)
在开发中会用到右键菜单,我们来一起学习一下. 假如,我们现在已经准备好了列表,就差右键处理了. 1.在资源视图中的添加一个MENU,如图 2.给要添加右键菜单的ListCtrl子类,添加消息 按 ct ...
- merlin.acs的使用方法 merlin.acs添加右键菜单
阅读全文:http://www.cckan.net/forum.php?mod=viewthread&tid=39 看看这个怎么样吧 直接看代码吧我就不多说了 1.先下载一下这个控件 吧 网上 ...
- openlayer右键菜单_OpenLayers添加右键菜单
1. 首先修改 OpenLayers Events.js 定位到下面代码段,添加右键菜单事件: View Code OpenLayers.Events = OpenLayers.Class ...
- tkinter向文本框里加内容_给tkinter文本框添加右键菜单
给tkinter文本框添加右键菜单 需求:直接右键点击使用tkinter创建的文本框是不会弹出菜单的.我们需要实现右键点击tkinter框架下的Entry对象.Text对象后弹出右键菜单可复制.粘贴和 ...
- 非管理员用户添加右键菜单(管理员也适用)
目录 背景 解决办法 总结:把其他教程中的HKEY_CLASSES_ROOT替换为HKEY_CURRENT_USER\SOFTWARE\Classes即可 背景 网上大多数教程添加右键菜单的方法都需要 ...
- chrome添加右键菜单收藏CSDN文章到我的博客
需求: 看到好的文章时,想收藏,但是chrome的收藏夹不支持搜索(虽然有其他插件可以用),收藏的多了以后不好找,而且万一某一天浏览器或系统重装,而没有登录同步数据或者没有导出由的话这些收藏就会丢失. ...
- Windows10 为指定类型文件添加右键菜单项并传递文件名,点击后调用python脚本进行处理
Windows10 为指定类型文件添加右键菜单项并传递文件名,点击后调用python脚本进行处理 需求举例: 在.torrent文件上点击右键时,右键菜单上显示 [更新文件名称],点击此项调用相应的p ...
最新文章
- Snackbar-Android M新控件
- vue安装与配置、脚手架
- BZOJ.4516.[SDOI2016]生成魔咒(后缀自动机 map)
- mysql定义shell变量_shell 变量的定义,赋值,运算
- 华为和荣耀蓝牙耳机为什么那么贵?
- Python+OpenCV:高动态范围(High Dynamic Range, HDR)
- SVN下载安装及入门使用教程,详细到不能再详细了
- 一文读懂什么是MRO采购
- 调出软键盘 挤掉标题栏咋办
- python搬家具_Python面向对象实现案例———摆放家具
- GMA Round 1 YGGDRASIL
- 【下载】Step7 V5.4 中文版【绝对能安装使用】
- kettle carte子服务器的使用
- ffmpeg js转换音频_webRTC使用ffmpeg.js将webm转换为mp4
- 卷积神经网络使用到的公式
- 人生效率手册---读书笔记
- 怎样禁止macOS 在Safari下载的ZIP文件自动解压?
- python怎么编写对称图案_python – 无论matplotlib中的箭头角度如何,都使箭头形状对称...
- 联邦学习在金融领域的发展和应用
- MOS管驱动电路及注意事项-KIA MOS管