日期:2014-05-19  浏览次数:20815 次

winform下datagrid双击问题
在winform下,我的程序现在只能靠点击datagrid   的窗体触发dataGrid1_DoubleClick(object   sender,   System.EventArgs   e)事件,请问要怎么样才能在双击绑定到datagrid中的某一行数据的时候触发这个双击事件????请朋友们帮忙看看?谢谢

------解决方案--------------------
在生成数据行的时候重新绑定事件——其实没有必要,直接操作有什么不好呢??

而且代码简单,操作方便的
------解决方案--------------------
选定一行.
加上鼠标事件:
private void imageShow_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
System.Drawing.Point pt = new Point(e.X, e.Y);
DataGrid.HitTestInfo hti = this.imageShow.HitTest(pt);
if(hti.Type == DataGrid.HitTestType.Cell)
{
this.imageShow.CurrentCell = new DataGridCell(hti.Row, hti.Column);
this.imageShow.Select(hti.Row);
}
}

鼠标双击事件:
private void imageShow_DoubleClick(object sender, System.EventArgs e)
{
// int y = imageShow.CurrentCell.ColumnNumber;
int x = imageShow.CurrentCell.RowNumber;
MessageBox.Show(imageShow[x,0].ToString());
}


就这样就可以,触发双击事件,

------解决方案--------------------
在生成数据行的时候重新绑定事件——其实没有必要,直接操作有什么不好呢??

而且代码简单,操作方便的


------解决方案--------------------
LS两为说得也是,,,不用绑定...
------解决方案--------------------
捕捉DataGrid的双击事件
http://dotnet.aspx.cc/article/c83c3a4b-8571-4ce6-fbac-35dc28d14389/read.aspx
------解决方案--------------------
其实private void imageShow_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)

是一章眼法...
LZ可以直接用
private void imageShow_DoubleClick(object sender, System.EventArgs e)

看看能不能得到,
------解决方案--------------------
Double_Click事件里,对当前活动的行或列进行处理不行吗?
------解决方案--------------------
程序没有问题的啊

LZ把双击事件改为其他的试试..
是不是出了什么问题
------解决方案--------------------
this.dataGrid1.CurrentCell.RowNumber
this.dataGrid1.CurrentCell.ColumnNumber
看看这两个属性能不能得到当前点击的行,列号。
------解决方案--------------------
二 捕获DataGrid里的双击事件,本来很简单的问题,可是如果你只对DataGrid的DoubleClicked里写程序的话,你就会发现一个问题,在DataGrid的cell里双击时没有反应,这是因为在DataGrid里有TextBox组成,所以你就需要捕获TextBox的DoubleClicked事件,但你完成这一步时,看看效果咋样,如果你仔细的话,你就又会发现一个问题,当光标还没有在一个单元格时,双击该单元格,发现了什么?没有任何反应,明明双击了吗,为啥呢?这是因为DataGrid把这个双击操作分解了,分为两个单击,第一个使该单元格获得光标,第二个为单击事件,所以你的双击就没有反应了,所以我们要做的就是把这个动作当作双击事件来处理,这样就达到我们的目的了。所以捕获一个双击事件就要做三件事。下面是一段代码。

第一步:

private void dgRole_DoubleClick(object sender,System.EventArgs e)

//dgRole为DataGrid



{

this.frmRoleRightShow(); //我们双击要做的事

}

第二步:

private void TextBox_DoubleClick(object sender,System.EventArgs e)

{

this.frmRoleRightShow();

}

第三步:

DateTime gridMouseDownTime;

private void dgRole_MouseDown(object sender,System.Windows.Forms.MouseEventArgs e)

{