接着说,GirdControl如何定位和查找指定列显示值的行(注意是列的实显示值,而不是关联数据源列值)

下面请看代码:

  1. using DevExpress.XtraGrid.Views.Base;
  2. using DevExpress.XtraGrid.Columns;
  3. // ...
  4.  
  5. string searchText = "Japan";
  6. // obtaining the focused view
  7. ColumnView view = (ColumnView)gridControl1.FocusedView;
  8. // obtaining the column bound to the Country field
  9. GridColumn column = view.Columns["Country"];
  10. if(column != null) {
  11. // locating the row
  12. //如果用数据源中的列值,请用ColumnView.LocateByValue
  13. int rhFound = view.LocateByDisplayText(view.FocusedRowHandle + 1, column, searchText);
  14. // focusing the cell
  15. if(rhFound != GridControl.InvalidRowHandle) {
  16. view.FocusedRowHandle = rhFound;
  17. view.FocusedColumn = column;
  18. }
  19. }

另一个查找示例

  1. DevExpress.XtraGrid.Views.Base.ColumnView view = gridControl1.MainView as DevExpress.XtraGrid.Views.Base.ColumnView;
  2. view.BeginUpdate();
  3. try {
  4. int rowHandle = 0;
  5. DevExpress.XtraGrid.Columns.GridColumn col = view.Columns["Category"];
  6. while(true) {
  7. // locating the next row
  8. rowHandle = view.LocateByValue(rowHandle, col, "SPORTS");
  9. // exiting the loop if no row is found
  10. if (rowHandle == DevExpress.XtraGrid.GridControl.InvalidRowHandle)
  11. break;
  12. // perform specific operations on the row found here
  13. // ...
  14. rowHandle++;
  15. }
  16. } finally { view.EndUpdate(); }

将特定编辑框绑定到列 默认的cell编辑框是不可以改变的,即使是在运行时,因为它们是动态创建和注销的。 要想定制,就在设计时修改ColumnEdit吧。

  1. using DevExpress.XtraEditors.Repository;
  2.  
  3. //Create a repository item for a combo box editor
  4. RepositoryItemComboBox riCombo = new RepositoryItemComboBox();
  5. riCombo.Items.AddRange(new string[] {"London", "Berlin", "Paris"});
  6. //Add the item to the internal repository
  7. gridControl1.RepositoryItems.Add(riCombo);
  8. //Now you can define the repository item as an in-place column editor
  9. colCity.ColumnEdit = riCombo;

另一个运行时绑定列编辑框示例

  1. private void gridView1_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e) {
  2. if (e.Column.FieldName == "FieldName") return;
  3. DevExpress.XtraGrid.Views.Grid.GridView gv = sender as DevExpress.XtraGrid.Views.Grid.GridView;
  4. string fieldName = gv.GetRowCellValue(e.RowHandle, gv.Columns["FieldName"]).ToString();
  5. switch (fieldName) {
  6. case "Population":
  7. e.RepositoryItem = repositoryItemSpinEdit1;
  8. break;
  9. case "Country":
  10. e.RepositoryItem = repositoryItemComboBox1;
  11. break;
  12. case "Capital":
  13. e.RepositoryItem = repositoryItemCheckEdit1;
  14. break;
  15. }
  16. }

检验录入数据是否有效

  1. using DevExpress.XtraGrid.Views.Grid;
  2. using DevExpress.XtraGrid.Columns;
  3.  
  4. public bool isValidDate(int day, int month, int year) {
  5. return (day > 0) && (month > 0) && (month <= 12) && (year > 1980) && (year < 2100) && (day <= DateTime.DaysInMonth(year, month));
  6. }
  7.  
  8. private void gridView1_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e) {
  9. GridView view = sender as GridView;
  10. GridColumn colDay = view.Columns["Day"];
  11. GridColumn colMonth = view.Columns["Month"];
  12. GridColumn colYear = view.Columns["Year"];
  13. int day = (int)view.GetRowCellValue(e.RowHandle, colDay);
  14. int month = (int)view.GetRowCellValue(e.RowHandle, colMonth);
  15. int year = (int)view.GetRowCellValue(e.RowHandle, colYear);
  16. e.Valid = isValidDate(day, month, year);
  17. if(!e.Valid) {
  18. view.SetColumnError(colDay, "Check the day");
  19. view.SetColumnError(colMonth, "Check the month");
  20. view.SetColumnError(colYear, "Check the year");
  21. }
  22. }

MouseMove捕捉

  1. private void Grid_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
  2. {
  3. ShowHitInfo(this.gridView1.CalcHitInfo(new Point(e.X, e.Y)));
  4. }
  5. private void ShowHitInfo(DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi)
  6. {
  7. DevExpress.XtraGrid.Views.Base.ColumnView cgv =
  8. (DevExpress.XtraGrid.Views.Base.ColumnView)Grid.MainView;
  9. string columnName = hi.Column == null ? "No column" : hi.Column.Caption;
  10. switch(columnName)
  11. {
  12. case "账号":
  13. txtUserName.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
  14. break;
  15. case "密码":
  16. txtPassword.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
  17. break;
  18. case "真实姓名":
  19. txtRealName.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
  20. break;
  21. case "电子邮件":
  22. txtEmail.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
  23. break;
  24. case "角色":
  25. cbRole.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
  26. break;
  27. default:
  28. txtUserName.Text = "Null";
  29. txtPassword.Text = "Null";
  30. txtRealName.Text = "Null";
  31. txtEmail.Text = "Null";
  32. cbRole.Text = "Null";
  33. break;
  34. }

主从表的设置

  1. DataTable dt = pb.GetItemInfoList(Port).Copy(); //返回一个TABLE
  2. dt.TableName = "ItemInfo";
  3. ds.Tables.Add(dt);
  4. DataTable dt2 = pb.GetBuildingInfoList(Port).Copy(); //返回一个TABLE
  5. dt2.TableName = "BuildingInfo";
  6. ds.Tables.Add(dt2);
  7. DataColumn keyColumn = ds.Tables["ItemInfo"].Columns["ITEMINFO_ID"];
  8. DataColumn foreignKeyColumn = ds.Tables["BuildingInfo"].Columns["ITEMINFOID"];
  9. ds.Relations.Add("itembuildinginfo", keyColumn, foreignKeyColumn);
  10. gridControl1.DataSource = ds.Tables["ItemInfo"];

获取从表的当前选择行的某一列(如ID列)      这个时候再使用获取主表当前选择行的某一列的方法是不行的,因为所得到的seletedrowscount=0。使用如下方法得到:   在MASTER表的展开事件中得到detail有的view.然后就可以利用它了。例:

  1. //主表的masterrowexpanded事件
  2. private void gridView1_MasterRowExpanded(object sender, DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs e)
  3. {
  4. detailView = gridView1.GetDetailView(e.RowHandle, e.RelationIndex) as DevExpress.XtraGrid.Views.Grid.GridView;
  5. }
  6.  
  7. //取得从表的当前行
  8. int[] i = detailView.GetSelectedRows();
  9. DataRowView dt = (DataRowView)detailView.GetRow(i[0]);
  10.  
  11. //获得当前行某列的值可以使用
  12.  
  13. dt["列名"].ToString();
  14.  
  15. //获得当那个列的值。

定义焦点行的方法:

  1. gridView_bcode.FocusedRowHandle = focuseRowInt; //通过设置GridView 的FocusedRowHandle属性
  2.  
  3. //获取焦点行任意单元格的数据
  4. ColumnView cv = (ColumnView)gridControl_Gongzi.FocusedView;//重新获取此ID 否则无法从表头连删获取不到id
  5. int focusedhandle = cv.FocusedRowHandle;
  6. object rowIdObj = gridView1.GetRowCellValue(focusedhandle, "id");
  7. if (DBNull.Value != rowIdObj)
  8. {
  9. FocusedRow_id = Convert.ToInt32(rowIdObj);
  10. }
  11. //获取焦点行任意单元格的数据
  12. ColumnView cv = (ColumnView)gridControl_Gongzi.FocusedView;//重新获取此ID 否则无法从表头连删获取不到id
  13. int focusedhandle = cv.FocusedRowHandle;
  14. object rowIdObj = gridView1.GetRowCellValue(focusedhandle, "id");
  15. if (DBNull.Value != rowIdObj)
  16. {
  17. FocusedRow_id = Convert.ToInt32(rowIdObj);
  18. }
  19. view plaincopy to clipboardprint?
  20. //当数据发生变化时执行
  21. private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e)
  22. {
  23. int intRowHandle = e.RowHandle;
  24. FocusedRow_bumen = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "bumen"));
  25. FocusedRow_xingming = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "xingming"));
  26. //FocusedRow_jibengongzi = Convert.ToDecimal(gridView1.GetRowCellValue(intRowHandle, "jibengongzi"));
  27. object rowJibengongziObj = gridView1.GetRowCellValue(intRowHandle, "jibengongzi");
  28. if (DBNull.Value != rowJibengongziObj)
  29. {
  30. FocusedRow_jibengongzi = Convert.ToDecimal(rowJibengongziObj);
  31. }
  32. }
  33. //当数据发生变化时执行
  34. private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e)
  35. {
  36. int intRowHandle = e.RowHandle;
  37. FocusedRow_bumen = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "bumen"));
  38. FocusedRow_xingming = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "xingming"));
  39. //FocusedRow_jibengongzi = Convert.ToDecimal(gridView1.GetRowCellValue(intRowHandle, "jibengongzi"));
  40. object rowJibengongziObj = gridView1.GetRowCellValue(intRowHandle, "jibengongzi");
  41. if (DBNull.Value != rowJibengongziObj)
  42. {
  43. FocusedRow_jibengongzi = Convert.ToDecimal(rowJibengongziObj);
  44. }
  45. } view plaincopy to clipboardprint?
  46. //设置焦点行的焦点单元格的位置
  47. ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;
  48. view.FocusedColumn = view.Columns["bumen"];
  49. //设置焦点行的焦点单元格的位置
  50. ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;
  51. view.FocusedColumn = view.Columns["bumen"]; view plaincopy to clipboardprint?
  52. //当焦点行发生改变时执行 获取选中焦点行id
  53. private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
  54. {
  55. int intRowHandle = e.FocusedRowHandle;
  56.  
  57. object rowIdObj = gridView1.GetRowCellValue(intRowHandle, "id");
  58.  
  59. if (DBNull.Value != rowIdObj)//做个判断否则获取不到id后报错
  60. {
  61. FocusedRow_id = Convert.ToInt32(rowIdObj);
  62. }
  63. }
  64. //当焦点行发生改变时执行 获取选中焦点行id
  65. private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
  66. {
  67. int intRowHandle = e.FocusedRowHandle;
  68.  
  69. object rowIdObj = gridView1.GetRowCellValue(intRowHandle, "id");
  70.  
  71. if (DBNull.Value != rowIdObj)//做个判断否则获取不到id后报错
  72. {
  73. FocusedRow_id = Convert.ToInt32(rowIdObj);
  74. }
  75. }
  76.  
  77. view plaincopy to clipboardprint?
  78. //焦点行的FocusedHandle为:
  79. FocuseRow_Handle = -999998;
  80. //获取焦点行的handle
  81. ColumnView newview = (ColumnView)gridControl_Gongzi.FocusedView;
  82.  
  83. FocuseRow_Handle = newview.FocusedRowHandle;
  84. //回车添加新行
  85. 代码
  86. private void gridView1_KeyPress(object sender, KeyPressEventArgs e)
  87.  
  88. {
  89. if (e.KeyChar == 13)
  90. {
  91. ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;
  92. if(view.IsLastRow)
  93. {
  94. if (FocuseRow_Handle == 0)
  95. {
  96. gridView1.AddNewRow();
  97.  
  98. ColumnView newview = (ColumnView)gridControl_Gongzi.FocusedView;
  99.  
  100. newview.FocusedColumn = newview.Columns["bumen"];//定位焦点网格的位置
  101.  
  102. FocuseRow_Handle = newview.FocusedRowHandle;//获取新焦点行的FocuseRowHandle 并初始化全局变量FocuseRow_Handle供保存操作时判断是upd ate还是insert
  103. }

Dev的关于XtraGrid的使用2的更多相关文章

  1. DEV 财务货币格式单元格

    在用友金蝶等财务软件中,经常需要输入货币类型的数据, 那么这种输入框要如何制作呢? 扩展DataGridView 的功能  出自在天空飞翔博客 http://www.cnblogs.com/micha ...

  2. Winform 中DataGridView、dev Gridview控件添加行标题

    有很多种方法. 1.可以在DataGridView控件中的RowStateChanged事件改变行标题单元格的值(Row.HeaderCell.Value) /// <summary> / ...

  3. Winform 中DataGridView控件添加行标题

    有很多种方法. 1.可以在DataGridView控件中的RowStateChanged事件改变行标题单元格的值(Row.HeaderCell.Value) /// <summary> / ...

  4. DEV XtraGrid绑定非绑定列(转)

      在Gridview创建一列 .将该列的UnboundType属性设置为bound(默认值)以外的数据类型 为该列设置一个窗体内全局唯一的FieldName,注意这个FieldName甚至不能出现在 ...

  5. Dev用于界面按选中列进行分组统计数据源(实用技巧)

    如果有用U8的可以明白这个功能就是模仿他的统计功能.我不过是把他造成通用的与适应于DEV的. (效率为6000条数据分组统计时间为3秒左右分组列过多5秒.1000条以下0.几秒,500条下0.00几秒 ...

  6. DEV GridControl小结

    1. 如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 2. 如何新增一条记录 (1).gridView.Ad ...

  7. DEV控件:gridControl常用属性设置(转载)

    特别长,先撸下来再说 1.隐藏最上面的GroupPanel  gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值  sValue=T ...

  8. DEV控件:gridControl常用属性设置

    1.隐藏最上面的GroupPanel  gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值  sValue=Table.Rows[g ...

  9. DEV控件Grid显示行号

    DEV控件Grid的显示行号需要通过一个事件来设置,具体设置代码为: private void gridView1_CustomDrawRowIndicator(object sender, DevE ...

随机推荐

  1. android 权限管理和签名 实现静默卸载

    为了实现静默卸载, 学了下android的安全体系,记录如下 最近在做个东西,巧合碰到了sharedUserId的问题,所以收集了一些资料,存存档备份. 安装在设备中的每一个apk文件,Android ...

  2. 用DIV+CSS做网页里要设置body和*规定内容

    body{}表示是对body标签的设置,就是<html><head></head><body></body></html> 里面 ...

  3. java thread park

    http://agapple.iteye.com/blog/970055 apidoc中说,park/unpark用来阻塞/激活线程,但是没有弃用方法suspend/resume的缺点,suspend ...

  4. call_compile.sql

    set echo off prompt prompt ========================================================================= ...

  5. 【贪心】时空定位II

    [贪心]时空定位II 题目描述 有一块空间,横向长w,纵向长为h,在它的横向中心线上不同位置处装有n(n≤10000)个点状的定位装置,每个定位装置i定位的效果是让以它为中心半径为Ri的圆都被覆盖.请 ...

  6. base64编码的图片字节流存入html页面中的显示

    在图片数据中加载到一个img标签,并如下处理 <img src="data:image/png;base64,...

  7. 强制设置IE浏览器的版本模式

    转载自:http://blog.csdn.net/huwenhu2007/article/details/17954119 1.<meta http-equiv="X-UA-Compa ...

  8. Android PopupWindow的使用技巧(转)

    Android PopupWindow的使用技巧 PopupWindow是Android上自定义弹出窗口,使用起来很方便. PopupWindow的构造函数为 public PopupWindow(V ...

  9. 基于I2C EPPRPM(AT24C02B) + LCD12864实验

    本次实验目的:在指定的EPPROM地址中,写入一数据,延时100MS后,在从该地址中读取,并在LCD上显示. 该实验在前两天就开始做了,一开始并没有成功,读出的一直0x00,当时也调了一会,但跳回到P ...

  10. Counting Haybales

    Counting Haybales 题目描述 Farmer John is trying to hire contractors to help rearrange his farm, but so ...