DataGridView 一个单元格中实现多个超链接 超简单

林子的传智 2016-09-20 02:17:03




如图:
//1.添加一个超链接列,并控制其大小不可改变,固定大小
DataGridViewLinkColumn dgvlcOprate = new DataGridViewLinkColumn();
dgvlcOprate.HeaderText = "操作";
dgvlcOprate.Width = 120;
dgvlcOprate.Resizable = DataGridViewTriState.False;//设置此列不可调整大小
dgvlcOprate.Name = "oprate";

dgvData.Columns.Add(dgvlcOprate);

//2.设置单元格中连接的操作
dgvData.Rows[index].Cells["oprate"].Value = "查看" + " | " + "编辑" + " | " + "删除";

//3.获取鼠标在单元格中点击的位置
int mouseX = 0;
int mouseY = 0;
private void dgvData_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.RowIndex > -1)
{
if (dgvData.Columns[e.ColumnIndex].Name == "oprate")
{
mouseX = e.X;
mouseY = e.Y;
}
}
}

//4.在点击当前单元格时,鼠标点击的位置和单元格的宽度比较,控制点击的位置,算出点击的是哪里,控制点击的事件
private void dgvData_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex > -1)
{
switch (dgvData.Columns[e.ColumnIndex].Name)
{
case "oprate":
Rectangle rc = dgvData.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false);//单元格区域的矩形
if (0 < mouseX && mouseX < rc.Width / 3)
{
MessageBox.Show("查看" + e.RowIndex + "行" + e.ColumnIndex + "列");
}
else if (rc.Width / 3 < mouseX && mouseX < ((rc.Width / 3) * 2))
{
MessageBox.Show("编辑" + e.RowIndex + "行" + e.ColumnIndex + "列");
}
else if (((rc.Width / 3) * 2) < mouseX && mouseX < rc.Width)
{
MessageBox.Show("删除" + e.RowIndex + "行" + e.ColumnIndex + "列");
}
break;
}
}
}


...全文
1292 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq262166445 2016-09-23
  • 打赏
  • 举报
回复
引用 6 楼 ciyi7854 的回复:
楼上说的怎么自动实现?
绑定数据源,启用编辑删除等等
林子的传智 2016-09-23
  • 打赏
  • 举报
回复
引用 5 楼 oysy 的回复:
晕死,在winform下,哪用得着这么麻烦 你是不是从学web过来的,楼主? 这个功能可以自动生成的
你说的自动生成怎么做的?探讨一下
  • 打赏
  • 举报
回复
@oysy 请教如何自动生成,探讨探讨
ciyi7854 2016-09-22
  • 打赏
  • 举报
回复
楼上说的怎么自动实现?
飞天凤凰601 2016-09-21
  • 打赏
  • 举报
回复
晕死,在winform下,哪用得着这么麻烦 你是不是从学web过来的,楼主? 这个功能可以自动生成的
jinting2010 2016-09-21
  • 打赏
  • 举报
回复
有个方法可以通过字体计算长度
zj_zwl 2016-09-20
  • 打赏
  • 举报
回复
感觉自定义个link列更好
林子的传智 2016-09-20
  • 打赏
  • 举报
回复
是的!这种方法是我目前发现的WINFORM中比较简单的方法了,一般情况下,所谓的操作不就是增删改查嘛,这些完全可以是相同的字数,如果字数不同,你可以让每个操作所占的位置大小调整成一样大小就可以了 @ wangzhiwei0721
王志威丶 2016-09-20
  • 打赏
  • 举报
回复
如果操作中的操作项改变了,并且字数不同,那是不是意味着我要一点点计算每项的点击位置范围

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧