DevExpress GridView 列標題點選事件

衣舞晨風發表於2016-04-23

GridView有RowCellClick事件,即單元格點選事件,但是針對列標題行以及列標題單元格卻沒有相應的事件。

在這裡使用GridView的MouseDown事件。這裡同樣使用的是GridHitInfo來獲取點選位置的資訊,來判斷是否在列標題上。GridHitInfo根據滑鼠點選的x、y座標獲取該點的相關資訊,判斷是否點選在列標題行內。

private void gridView_MouseDown(object sender, MouseEventArgs e)

        {

            //滑鼠左鍵點選

            if (e.Button == MouseButtons.Left)

            {

                GridHitInfo info = gridView.CalcHitInfo(e.X, e.Y);

                //在列標題欄內且列標題name是"colName"

                if (info.InColumnPanel && info.Column.Name =="colName")

                {

                    XtraMessageBox.Show("點選Name列標題!");

                }

            }

        }

以上程式碼很簡單,但是有個小問題,就是在該列右邊線拖動這一列的列寬時,也會彈出對話方塊,因為這裡拖動列寬也被視為點選滑鼠。這顯然不合適。解決這個問題的辦法也很簡單,就是判斷滑鼠點選位置不在右邊線向左移動一點距離(3畫素)範圍內。下面對以上程式碼稍加修改,就不會再有這個問題了。

private void gridView_MouseDown(object sender, MouseEventArgs e)

        {

            //滑鼠左鍵點選

            if (e.Button == MouseButtons.Left)

            {

                GridHitInfo gridHitInfo = gridView.CalcHitInfo(e.X, e.Y);

                //在列標題欄內且列標題name是"colName"

                if (gridHitInfo.InColumnPanel && gridHitInfo.Column.Name =="colName")

                {

                    //獲取該列右邊線的x座標

                    GridViewInfo gridViewInfo = (GridViewInfo)this.gridView.GetViewInfo();

                    int x = gridViewInfo.GetColumnLeftCoord(gridHitInfo.Column) + gridHitInfo.Column.Width;

                    //右邊線向左移動3個畫素位置不彈出對話方塊(實驗證明3個畫素是正好的)

                    if (e.X < x - 3)

                    {

                        XtraMessageBox.Show("點選Name列標題!");

                    }

                }

            }

        }

上面的方法轉載自:DevExpress GridView使用技巧之列標題點選事件
方法二(同事浩哥想出來的):

if (info.InColumnPanel)
{                 
   if (gridControl1.Cursor != Cursors.Default)
    {
        XtraMessageBox.Show("當滑鼠在標題欄兩列之間的時候,滑鼠的樣式會發生變化");
    }
    else
    {
        //這裡面應該是點選的列標題而不是兩列之間的那部分
    }
}

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章