Leo*_*ett 3 c# datagridview onclick
我有DataGridView
一张表格.当我右键单击一行时,我需要程序打开上下文菜单.有了这个上下文菜单,我希望能够修改数据DataGridView
.
我已经获得了上下文菜单以显示我右键单击的位置,但我不知道从哪里开始.因为我将删除(例如)整行,我需要获取所述行的索引并将其设置为选中.我尝试了这个cell_clicked
事件,但我无法确定是否按下了鼠标左键或右键.但随着mouse_click
事件我无法得到行索引.
这是我的代码:
public Form()
{
ContextMenu contextMenu = new ContextMenu();
//Fill Context Menu
MenuItem delete = new MenuItem("Delete");
contextMenu.MenuItems.Add(delete);
}
private void grdSchedules_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
contextMenu.Show(grdSchedules, new Point(e.Y, e.Y));
//Get rowindex here and select row
}
}
Run Code Online (Sandbox Code Playgroud)
我这样试过:
private void grdSchedules_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right) //e.Button does not work here
{
contextMenu.Show(grdSchedules, new Point(e.Y, e.Y));
}
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个更简单,更快速的通用方法,适用于任何数据网格.此方法允许通过右键单击选择行.将此方法添加到DataGridViews的"MouseDown"事件:
public void DataGridView_RightMouseDown_Select(object sender, MouseEventArgs e)
{
// If the user pressed something else than mouse right click, return
if (e.Button != System.Windows.Forms.MouseButtons.Right) { return; }
DataGridView dgv = (DataGridView)sender;
// Use HitTest to resolve the row under the cursor
int rowIndex = dgv.HitTest(e.X, e.Y).RowIndex;
// If there was no DataGridViewRow under the cursor, return
if (rowIndex == -1) { return; }
// Clear all other selections before making a new selection
dgv.ClearSelection();
// Select the found DataGridViewRow
dgv.Rows[rowIndex].Selected = true;
}
Run Code Online (Sandbox Code Playgroud)
我找到了解决办法。我是这样做的:
private void grdSchedules_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
int currentMouseOverRow = grdSchedules.HitTest(e.X, e.Y).RowIndex;
for (int x = 0; x < grdSchedules.Rows.Count; x++)
{
if (grdSchedules.Rows[x].Index == currentMouseOverRow)
{
grdSchedules.Rows[x].Selected = true;
}
else
{
grdSchedules.Rows[x].Selected = false;
}
}
contextMenu.Show(grdSchedules, new Point(e.Y, e.Y));
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13722 次 |
最近记录: |