首先,c1Flexgrid这个控件不像vs里自带的DataGridView那样有CellClick事件可以直接获取用户点击的单元格信息。
注意:在c1Flexgrid里只能通过 click事件 处理 所以只能通过 HitTestInfo对象 把鼠标点下的坐标信息 变成我们需要的单元格信息(这个方法的到的左边可以避免 在点击空白以外的地方还是获取在这这之前获得焦点的单元格坐标信息)。
1 首先在click事件里 吧此事件的数据基类转换为 我们需要的 MouseEventArgs类型。
2 把MouseEventArgs.Location得到的坐标信息作为参数提供 给c1Flexgrid 控件的HitTest()方法 ,这样就可以得到一个HitTestInfo对象。
3 根据需要 判断 HitTestInfo对象的坐标点 不是行头,列头并且不是 数据单元格以为的地方。(也可以加上mouseEvent.Button == MouseButtons.Left 判断是不是鼠标左键的点击)
4 根据得到的横坐标 或者纵坐标 使用c1FlexGrid1.Rows[][] 二维数组进行定位单元格,想得到什么还不是轻而易举。
下面是项目中实例代码
1 // 通过HitTestInfo 根据坐标 取得所在行序号的相关值 2 private void c1FlexGrid1_Click(object sender, EventArgs e) 3 { 4 MouseEventArgs mouseEvent = e as MouseEventArgs; 5 if (mouseEvent.Button == MouseButtons.Left) 6 { 7 if (c1FlexGrid1.Rows != null && c1FlexGrid1.Rows[c1FlexGrid1.RowSel]["noid"] != null && c1FlexGrid1.RowSel > 0) 8 { 9 HitTestInfo hti = c1FlexGrid1.HitTest(mouseEvent.Location); 10 int currentRowIndex = hti.Row; // 也可以通过 c1FlexGrid1.RowSel,但是这个当你在点击空白处的时候,还是取得之前的停留的焦点行列信息 11 int currentColIndex = hti.Column; 12 //点击的地方不是行头,列头也不是数据以外的地方 13 if (currentRowIndex > 0 && currentColIndex > 0 && currentRowIndex < (c1FlexGrid1.Rows.Count)) 14 { 15 //获得排序字段 16 int rankValue = int.Parse(c1FlexGrid1.Rows[currentRowIndex]["rank"].ToString().Trim()); 17 //当前的id 18 noidValue = int.Parse(c1FlexGrid1.Rows[currentRowIndex]["noid"].ToString().Trim()); 19 //当前第一条记录id 20 firstId = int.Parse(c1FlexGrid1.Rows[1]["noid"].ToString().Trim()); 21 //当前最后条记录id 22 lastId = int.Parse(c1FlexGrid1.Rows[c1FlexGrid1.Rows.Count-1]["noid"].ToString().Trim()); 23 //给当前的上一条记录值 24 if (currentRowIndex>1) 25 { 26 upId = int.Parse(c1FlexGrid1.Rows[currentRowIndex - 1]["noid"].ToString().Trim()); 27 } 28 //给当前的下一条记录值 29 if (currentRowIndex < c1FlexGrid1.Rows.Count-1) 30 { 31 donwId = int.Parse(c1FlexGrid1.Rows[currentRowIndex+1]["noid"].ToString().Trim()); 32 } 33 34 //根据情况按钮不可用 35 butUp.Enabled = rankValue <= 1 ? false : true; 36 butTop.Enabled = rankValue <= 1 ? false : true; 37 butDonw.Enabled = rankValue >= dt.Rows.Count?false:true; 38 butBootom.Enabled = rankValue >= dt.Rows.Count ? false : true; 39 } 40 } 41 } 42 }
总之必须要根据点下的鼠标坐标来获取选择的单元格,不知道是不是我用的版本太低了 新版本有更新 CellClick类似的事件么