• DataGridView数据呈现之行信息HitTestInfo用于选择呈现第一行


    公告QQ群:124766907,若你是在.NET领域有独到见解,并有深厚的编程功力,在某一领域具有专长,欢迎本您入群,本群已经有好几位MVP,在SL,.NET,BS方面具有造诣的人欢迎进群。无4年以上经验者勿加,本群追寻高端顶级,多谢。

    由于子窗体进行了数据更改,保存,需要刷新父窗体BODY里DataGridView里的数据,因此,当BODY里的数据量比较大,而你刚好是选的是当前行比较靠后,又要刷新父窗体的时候,可能默认就数据定位到第一行了。也许你以前是用的是dataGridView.CurrentRow.Index进行记录,然后FirstDisplayedScrollingRowIndex里进行值更改,让后再使用FirstDisplayedScrollingRowIndex进行行确定行的位置,然后可能使用到FirstDisplayCell属性进行当前光标的定位。

    现在可以直接使用DATAGRIDVIEW的HitTestInfo方法,获取当前鼠标定位到的行列索引,HitTestInfo自己就包含了行列索引,或者包含了当前鼠标在屏幕中的X,Y坐标,可以根据这些属性进行再定位。

     /// <summary>
    /// 鼠标点击的时候就获取当前的HitTestInfo信息
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
    {
    // hittest全局变量DataGridView.HitTestInfo hittest;
    hittest = dataGridView1.HitTest(e.X, e.Y);
    //MessageBox.Show(hittest.ToString());
    this.dataGridView1.Rows[hittest.RowIndex].Selected = true;
    }
    //测试重新定位。
    private void button1_Click(object sender, EventArgs e)
    {
    if (hittest != null)
    {
    dataGridView1.FirstDisplayedScrollingRowIndex
    = hittest.RowIndex;
    }
    else
    {
    dataGridView1.FirstDisplayedScrollingRowIndex
    = 0;
    }
    }

    也可以直接定义全局变量,获取行索引,然后定位到第一个单元格就OK了

    dgvDetails.CurrentCell = 
    dgvDetails.Rows[currentBodyDetailRowIndexSelected].Cells[0];//再重新定位到当前行
    dgvDetails.FirstDisplayedScrollingRowIndex
     = currentBodyDetailRowIndexSelected;
    dgvDetails.FirstDisplayedCell =
     dgvDetails.Rows[currentBodyDetailRowIndexSelected].Cells[0];

  • 相关阅读:
    敏捷不是XP(口水文)
    利用异或的特性解决,找出重复数的问题,应该是目前最优算法。
    开源和免费那些事儿(二)
    开源和免费那些事儿
    LINQ本质 外篇 JOIN补遗
    在北京求.NET开发职位,人已经到达北京
    软件是邪恶的
    最近遇到的两个面试题兼卖身广告
    谈谈信仰和银弹。
    继续高阶函数好玩有用的扩展(网吧行文)
  • 原文地址:https://www.cnblogs.com/wanzegui325/p/WinForm_DataGridView_HitTestInfo_RowPosition.html
Copyright © 2020-2023  润新知