为什么不试以下:this.dataGrid1.GetChildAtPoint(e.x,e.y)

解决方案 »

  1.   

    楼上说的可取,看你程序的要求了。另外,你也可以在mouseup事件中加入以下代码。如果存在多选问题,还要判断shift键的状态。
    private void dataGrid1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    System.Drawing.Point pt = new Point(e.X, e.Y);
    DataGrid.HitTestInfo hti = dataGrid1.HitTest(pt);
    if(hti.Type == DataGrid.HitTestType.Cell)
    {
    this.dataGrid1.BindingContext[this.dataGrid1.DataSource,this.dataGrid1.DataMember].Position=hti.Row;

    else
    if (hti.Type == DataGrid.HitTestType.RowHeader)
    {
    int count=this.dataGrid1.BindingContext[this.dataGrid1.DataSource,this.dataGrid1.DataMember].Count;
    for (int i=0;i<count;i++)
    this.dataGrid1.UnSelect(i);
    this.dataGrid1.BindingContext[this.dataGrid1.DataSource,this.dataGrid1.DataMember].Position=hti.Row;
    this.dataGrid1.Select(hti.Row);
    }
    }
      

  2.   

    下面的代码已基本实现了右键选取,可是还有个问题就是可以多选,但我不想让他多选,如何去除?
    // 实现右键选取
    private void dgPurchaseList_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    System.Drawing.Point pt = new Point(e.X, e.Y);
    DataGrid.HitTestInfo hit = this.dgPurchaseList.HitTest(pt);
    if (hit.Type == DataGrid.HitTestType.Cell )
    {
    this.dgPurchaseList.Select(hit.Row);
    }
    }
      

  3.   

    只能使用遍历了
    int count=this.dataGrid1.BindingContext[this.dataGrid1.DataSource,this.dataGrid1.DataMember].Count;
    for (int i=0;i<count;i++)
    this.dataGrid1.UnSelect(i);
      

  4.   

    if (hit.Type == DataGrid.HitTestType.Cell )
    {
    int count=this.dgPurchaseList.BindingContext[this.dgPurchaseList.DataSource,this.dgPurchaseList.DataMember].Count;
    for (int i=0;i<count;i++)
    this.dgPurchaseList.UnSelect(i);
    this.dgPurchaseList.Select(hit.Row);
    }