c#开发_Dev的关于XtraGrid的使用(GridControl小结)

1,增加新行用InitNewRow事件,给新行某字段赋值。后结束编辑。

private void grdView_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
    {
     DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView;
     view.SetRowCellValue(e.RowHandle, view.Columns["EnterID"], this.dS_MEnterStoreView.MEnterStore[0].ID);
     this.grdControl.EmbeddedNavigator.Buttons.EndEdit.DoClick();
     this.grdView.UpdateCurrentRow();
    }

2,如果进行行验证,就在换行时时行,用grdView_FocusedRowChanged事件

private void grdView_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
    {
     WsClient.WS_MEnterStore.DS_MEnterStoreView.MEnterDetailRow row = (WsClient.WS_MEnterStore.DS_MEnterStoreView.MEnterDetailRow)this.grdView.GetDataRow(e.FocusedRowHandle);

     if (row != null)
     {
      if ((this.OperState == Common.Enum.TOperState.UnConfirmNew)
       || (this.OperState == Common.Enum.TOperState.UnConfirmEdit))
      {
       this.InitComboBoxValue(row, row.IsGoodIDNull()?0:row.GoodID, false);
       this.InitBatchComboBoxValue(row, row.IsGoodIDNull()?0:row.GoodID, false);
      }
     }
    }

3,如果需要改变行的某一列的同时改变其它的列用grdView_CellValueChanged事件

private void grdView_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
    {
     if (this.grdView.FocusedColumn == e.Column)
     {
 if (e.Column == this.colAmount)
      {
     }
 }
 }

4,如果需在离开行的时候需要验证,则用grdView_BeforeLeaveRow事件.

DevExpress XtraGrid的功能实在强大,刚使用的时候看到一大片属性设置,分不清东南西北,参照demo和使用中的一些经验,记录一下使用方法。现在数据库访问都使用ORM技术了,对于DataSouce绑定以下是以IList为说明对象。

控件基本定义   DevExpress.XtraGrid.GridControl gridControl1;

1、 数据绑定(IList)

DevExpress.XtraGrid.Views.Grid.GridView gridView1;
 IList<MyClass> list = new BindingList<MyClass>();
 //初始list
 list.Add(A);
 list.Add(B);
 ………..
 gridControl1.DataSource = list;

2、 在Grid上编辑数据

修改属性gridView1.OptionsView.NewItemRowPosition,设为Top或Bottom可以在Grid上添加数据。

(在demo中原文:a record object must be inherited from the IEditableObject class if you need the ability to cancel newly added records via the grid)

译:如果你需要通过gird取消新建的记录,你的记录对象必须实现IEditableObject

(注:在测试中,感觉不需要继承IEditableObject,在grid编辑后也能实现取消。demo通过实现IEditableObject的BeginEdit、CancelEdit方法,数据编辑后恢复特定数据。不使用grid直接修改数据,可以考虑这种恢复原数据的方法。)

3、 修改列(Column)格式

DevExpress.XtraGrid.Columns.GridColumn col = gridView1.Columns[0];

数据对齐方式 col.AppearanceCell.TextOptions.HAlignment, 默认值Default,可选值Default/Near/Center/Far。

说明:以下情况是基于从左到右的文字排列;若是从右到左,用法相反。

Default:数据默认的对齐方式

Near:左对齐

Center:居中对齐

Far:右对齐

列标题 col.Caption

对应绑定数据的属性 col.FieldName

排列顺序 col.VisibleIndex

格式化显示数据

Col.DisplayFormat.FormatType

Col.DisplayFormat.Format

Col.DisplayFormat.FormatString

区别:FormatType/FormatString 使用当前系统的语言区域设置,Format使用特定的

4、 使用Grid内置导航栏

gridControl1.UseEmbeddedNativgator=True

设定内置导航栏按钮其他属性 gridControl1.EmbeddedNavigator

5、 GridView内置方式编辑数据

禁止编辑数据 gridView1.OptionsBehavior.Editable = False,默认是True 可编辑。

Gridview内置数据编辑器显示方式 gridView1.OptionsBehavior.EditorShowMode,可选值Default/ MouseDown/MouseUp/ Click。

说明:

Default 多选Cell相当于Click,单选Cell相当于MouseDown

MouseDown 在单元格内按下鼠标键时打开内置编辑器

MouseUp 在单元格内释放鼠标键时打开内置编辑器

Click 在不是编辑状态,但获得焦点的单元格中点击时打开编辑器。点击非焦点单元格时,首先会切换焦点,再点击时才打开编辑器

6、 设定GrideView单元格的内置编辑器

在Run Designer的Columns选中需要变更编辑方式的Column,在ColumnEdit 属性的下拉菜单中选择编辑数据使用的控件。

例1:Person表的CountryID字段的值来自Country表,使用下拉列表显示CountryName编辑

修改CountryIDColumn.ColumnEdit值,选new->LookupEdit,默认命名为repositoryItemLookUpEdit1。展开ColumnEdit属性,将DisplayMember 设为CountryName,DropDownRows是下拉列表的行数,ValueMember设为CountryID。

代码中添加:

//init data

repositoryItemLookUpEdit1.DataSource = ds.Tables[Country];

例2:字段Age是整型,需要使用SpinEdit编辑

修改AgeColumn.ColumnEdit值,选new->SpinEdit。展开ColumnEdit属性,修改MaxValue、MinValue设定最大、最小值。运行时Age的取值只能在MaxValue至MinValue之间选值。

7、 GridView调节行高显示大文本

默认情况下gridview已单行方式显示,过长的文本只能显示开头部分,鼠标停留在单元格上方有ToolTip显示所有文本。在文本单元格的右边两个按钮供切换显示上下行。若需要在单元格变更行高显示所有文本。使用

gridView1.OptionsView.RowAutoHeight = True;

gridView1.LayoutChanged();

private void gridView1_CalcRowHeight(object sender,DevExpress.XtraGrid.Views.Grid.RowHeightEventArgs e)
 {
 if(e.RowHandle >= 0)
 e.RowHeight = (int)gridView1.GetDataRow(e.RowHandle)["RowHeight"];
 }

8、 数据导出

XtraGrid支持Html、Xml、Txt、Xsl导出,对应的导出器是ExportHtmlProvider、ExportXmlProvider、ExportTxtProvider、ExportXslProvider

例:使用html格式导出数据

IExportProvider provider = new ExprotHtmlProvider(filename);
 ExportTo(provider);
 ……
 private void ExportTo(IExportProvider provider) {
             Cursor currentCursor = Cursor.Current;
             Cursor.Current = Cursors.WaitCursor;

             this.FindForm().Refresh();
             BaseExportLink link = gridView1.CreateExportLink(provider);
             (link as GridViewExportLink).ExpandAll = false;
             link.Progress += new DevExpress.XtraGrid.Export.ProgressEventHandler(Export_Progress);//进度条事件
             link.ExportTo(true);
             provider.Dispose();
             link.Progress -= new DevExpress.XtraGrid.Export.ProgressEventHandler(Export_Progress);
             Cursor.Current = currentCursor;

 }

9、 焦点单元格显示方式

GrideView默认的焦点单元格显示方式是整行选中,焦点单元格高亮。可以调整以下属性进行修改

gridView1.FocusRectStyle :焦点绘画方式 默认DrawFocusRectStyle.CellFocus(单元格)/ DrawFocusRectStyle.RowFocus(行)/ DrawFocusRectStyle.None(不绘画)

bool gridView1.OptionsSelection.EnableAppearanceFocusedCell :是否焦点显示选中的单元格

bool gridView1.OptionsSelection.EnableAppearanceFocusedRow :是否焦点显示选中的行

bool gridView1.OptionsSelection.InvertSelection :是否反显示

bool gridView1.OptionsSelection.MultiSelect:是否使用多选

10、
显示非数据源的数据

可以在GrideView上增加数据源没有的列,如合计、日期、序号或其他数据源等。

方法一:实现CustomColumnDisplayText事件(只能用于显示)

以下例子在bandedGridColumn1上显示 FirstName+LastName

bandedGridColumn1.OptionsColumn.AllowEdit = false;
 private void bandedGridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
 {
      if(e.Column.Equals(bandedGridColumn1))
 {
          DataRow row = bandedGridView1.GetDataRow(e.RowHandle);
          e.DisplayText = string.Format("{0} {1}", row["FirstName"], row["LastName"]);
      }
 }

方法二: 设定列的UnboundType,并实现CustomUnboundColumnData事件(可修改值)

以下例子演示DateTime/Int/String 绑定到数据列上显示。当修改 GrideView上的值时,将修改同步到原数组中

bandedGridColumn4.UnboundType = DevExpress.Data.UnboundColumnType.DateTime;
 bandedGridColumn5.UnboundType = DevExpress.Data.UnboundColumnType.Integer;
 bandedGridColumn6.UnboundType = DevExpress.Data.UnboundColumnType.String;

 private void bandedGridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) {
               if(array == null) return;
               if(e.ListSourceRowIndex >= array.Count) return;
               Record rec = array[e.ListSourceRowIndex] as Record;
               if(rec == null) return;
               switch(e.Column.UnboundType) {
                    case UnboundColumnType.DateTime:
                        if(e.IsGetData)
                             e.Value = rec.Date;
                        else rec.Date = (DateTime)e.Value;
                        break;
                    case UnboundColumnType.Integer:
                        if(e.IsGetData)
                             e.Value = rec.Count;
                        else rec.Count = (Int32)e.Value;
                        break;
                    case UnboundColumnType.String:
                        if(e.IsGetData)
                             e.Value = rec.Comment;
                        else rec.Comment = e.Value.ToString();
                        break;
               }
          }

提交当前行的修改

using DevExpress.XtraGrid;
 using DevExpress.XtraGrid.Views.Base;
 using System.Data.Common;
 //...
 public void UpdateDatasource(GridControl grid) {
     //Save the latest changes to the bound DataTable
     ColumnView view = (ColumnView)grid.FocusedView;
     view.CloseEditor();
     if(!view.UpdateCurrentRow()) return;

     //Update the database‘s Suppliers table to which oleDBDataAdapter1 is connected
     DoUpdate(oleDbDataAdapter1, dataSet11.Tables["Suppliers"]);
     //Update the database‘s Products table to which the oleDbDataAdapter2 is connected
     DoUpdate(oleDbDataAdapter2, dataSet11.Tables["Products"]);
 }

 public void DoUpdate(DbDataAdapter dataAdapter, System.Data.DataTable dataTable) {
     try {
         dataAdapter.Update(dataTable);
     } catch(Exception ex) {
         MessageBox.Show(ex.Message);
     }
 }

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

下面请看代码:

using DevExpress.XtraGrid.Views.Base;
 using DevExpress.XtraGrid.Columns;
 // ...

 string searchText = "Japan";
 // obtaining the focused view
 ColumnView view = (ColumnView)gridControl1.FocusedView;
 // obtaining the column bound to the Country field
 GridColumn column = view.Columns["Country"];
 if(column != null) {
 // locating the row
 //如果用数据源中的列值,请用ColumnView.LocateByValue
     int rhFound = view.LocateByDisplayText(view.FocusedRowHandle + 1, column, searchText);
     // focusing the cell
     if(rhFound != GridControl.InvalidRowHandle) {
         view.FocusedRowHandle = rhFound;
         view.FocusedColumn = column;
     }
 }

另一个查找示例

DevExpress.XtraGrid.Views.Base.ColumnView view = gridControl1.MainView as DevExpress.XtraGrid.Views.Base.ColumnView;
 view.BeginUpdate();
 try {
    int rowHandle = 0;
    DevExpress.XtraGrid.Columns.GridColumn col = view.Columns["Category"];
    while(true) {
       // locating the next row
       rowHandle = view.LocateByValue(rowHandle, col, "SPORTS");
       // exiting the loop if no row is found
       if (rowHandle == DevExpress.XtraGrid.GridControl.InvalidRowHandle)
          break;
       // perform specific operations on the row found here
       // ...
       rowHandle++;
    }
 }
 finally {
    view.EndUpdate();
 }

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

using DevExpress.XtraEditors.Repository;

 //Create a repository item for a combo box editor
 RepositoryItemComboBox riCombo = new RepositoryItemComboBox();
 riCombo.Items.AddRange(new string[] {"London", "Berlin", "Paris"});
 //Add the item to the internal repository
 gridControl1.RepositoryItems.Add(riCombo);
 //Now you can define the repository item as an in-place column editor
 colCity.ColumnEdit =  riCombo;

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

private void gridView1_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e) {
    if (e.Column.FieldName == "FieldName") return;
    DevExpress.XtraGrid.Views.Grid.GridView gv = sender as DevExpress.XtraGrid.Views.Grid.GridView;
    string fieldName = gv.GetRowCellValue(e.RowHandle, gv.Columns["FieldName"]).ToString();
    switch (fieldName) {
       case "Population":
          e.RepositoryItem = repositoryItemSpinEdit1;
          break;
       case "Country":
          e.RepositoryItem = repositoryItemComboBox1;
          break;
       case "Capital":
          e.RepositoryItem = repositoryItemCheckEdit1;
          break;
    }
 }

检验录入数据是否有效

using DevExpress.XtraGrid.Views.Grid;
 using DevExpress.XtraGrid.Columns;

 public bool isValidDate(int day, int month, int year) {
     return (day > 0) && (month > 0) && (month <= 12) && (year > 1980) && (year < 2100) && (day <= DateTime.DaysInMonth(year, month));
 }

 private void gridView1_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e) {
     GridView view = sender as GridView;
     GridColumn colDay = view.Columns["Day"];
     GridColumn colMonth = view.Columns["Month"];
     GridColumn colYear = view.Columns["Year"];
     int day = (int)view.GetRowCellValue(e.RowHandle, colDay);
     int month = (int)view.GetRowCellValue(e.RowHandle, colMonth);
     int year = (int)view.GetRowCellValue(e.RowHandle, colYear);
     e.Valid = isValidDate(day, month, year);
     if(!e.Valid) {
         view.SetColumnError(colDay, "Check the day");
         view.SetColumnError(colMonth, "Check the month");
         view.SetColumnError(colYear, "Check the year");
     }
 }

MouseMove捕捉

private void Grid_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
   {
   ShowHitInfo(this.gridView1.CalcHitInfo(new Point(e.X, e.Y)));
   }
   private void ShowHitInfo(DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi)
   {
    DevExpress.XtraGrid.Views.Base.ColumnView cgv =
     (DevExpress.XtraGrid.Views.Base.ColumnView)Grid.MainView;
    string columnName = hi.Column == null ? "No column" : hi.Column.Caption;
    switch(columnName)
    {
     case "账号":
      txtUserName.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
      break;
     case "密码":
      txtPassword.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
      break;
     case "真实姓名":
      txtRealName.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
      break;
     case "电子邮件":
      txtEmail.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
      break;
     case "角色":
      cbRole.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
      break;
     default:
      txtUserName.Text = "Null";
      txtPassword.Text = "Null";
      txtRealName.Text = "Null";
      txtEmail.Text = "Null";
      cbRole.Text = "Null";
      break;
    }

主从表的设置

DataTable dt = pb.GetItemInfoList(Port).Copy(); //返回一个TABLE
             dt.TableName = "ItemInfo";
             ds.Tables.Add(dt);
             DataTable dt2 = pb.GetBuildingInfoList(Port).Copy(); //返回一个TABLE
             dt2.TableName = "BuildingInfo";
             ds.Tables.Add(dt2);
             DataColumn keyColumn = ds.Tables["ItemInfo"].Columns["ITEMINFO_ID"];
             DataColumn foreignKeyColumn = ds.Tables["BuildingInfo"].Columns["ITEMINFOID"];
             ds.Relations.Add("itembuildinginfo", keyColumn, foreignKeyColumn);
             gridControl1.DataSource = ds.Tables["ItemInfo"];

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

//主表的masterrowexpanded事件
 private void gridView1_MasterRowExpanded(object sender, DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs e)
         {
             detailView = gridView1.GetDetailView(e.RowHandle, e.RelationIndex) as DevExpress.XtraGrid.Views.Grid.GridView;
         }

 //取得从表的当前行
 int[] i = detailView.GetSelectedRows();
             DataRowView dt = (DataRowView)detailView.GetRow(i[0]);

 //获得当前行某列的值可以使用

 dt["列名"].ToString();

 //获得当那个列的值。

定义焦点行的方法:

gridView_bcode.FocusedRowHandle = focuseRowInt; //通过设置GridView 的FocusedRowHandle属性 

 //获取焦点行任意单元格的数据
 ColumnView cv = (ColumnView)gridControl_Gongzi.FocusedView;//重新获取此ID 否则无法从表头连删获取不到id
                         int focusedhandle = cv.FocusedRowHandle;
                         object rowIdObj = gridView1.GetRowCellValue(focusedhandle, "id");
                         if (DBNull.Value != rowIdObj)
                         {
                             FocusedRow_id = Convert.ToInt32(rowIdObj);
                         }
 //获取焦点行任意单元格的数据
 ColumnView cv = (ColumnView)gridControl_Gongzi.FocusedView;//重新获取此ID 否则无法从表头连删获取不到id
                         int focusedhandle = cv.FocusedRowHandle;
                         object rowIdObj = gridView1.GetRowCellValue(focusedhandle, "id");
                         if (DBNull.Value != rowIdObj)
                         {
                             FocusedRow_id = Convert.ToInt32(rowIdObj);
                         }
  view plaincopy to clipboardprint?
 //当数据发生变化时执行
      private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e)
      {
          int intRowHandle = e.RowHandle;
          FocusedRow_bumen = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "bumen"));
          FocusedRow_xingming = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "xingming"));
          //FocusedRow_jibengongzi = Convert.ToDecimal(gridView1.GetRowCellValue(intRowHandle, "jibengongzi"));
          object rowJibengongziObj = gridView1.GetRowCellValue(intRowHandle, "jibengongzi");
          if (DBNull.Value != rowJibengongziObj)
          {
              FocusedRow_jibengongzi = Convert.ToDecimal(rowJibengongziObj);
          }
       }
    //当数据发生变化时执行
         private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e)
         {
             int intRowHandle = e.RowHandle;
             FocusedRow_bumen = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "bumen"));
             FocusedRow_xingming = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "xingming"));
             //FocusedRow_jibengongzi = Convert.ToDecimal(gridView1.GetRowCellValue(intRowHandle, "jibengongzi"));
             object rowJibengongziObj = gridView1.GetRowCellValue(intRowHandle, "jibengongzi");
             if (DBNull.Value != rowJibengongziObj)
             {
                 FocusedRow_jibengongzi = Convert.ToDecimal(rowJibengongziObj);
             }
          } view plaincopy to clipboardprint?
 //设置焦点行的焦点单元格的位置
 ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;
 view.FocusedColumn = view.Columns["bumen"];
 //设置焦点行的焦点单元格的位置
 ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;
 view.FocusedColumn = view.Columns["bumen"]; view plaincopy to clipboardprint?
 //当焦点行发生改变时执行 获取选中焦点行id
        private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            int intRowHandle = e.FocusedRowHandle;   

            object rowIdObj = gridView1.GetRowCellValue(intRowHandle, "id");   

            if (DBNull.Value != rowIdObj)//做个判断否则获取不到id后报错
            {
                FocusedRow_id = Convert.ToInt32(rowIdObj);
            }
        }
  //当焦点行发生改变时执行 获取选中焦点行id
         private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
         {
             int intRowHandle = e.FocusedRowHandle;

             object rowIdObj = gridView1.GetRowCellValue(intRowHandle, "id");

             if (DBNull.Value != rowIdObj)//做个判断否则获取不到id后报错
             {
                 FocusedRow_id = Convert.ToInt32(rowIdObj);
             }
         }   

  view plaincopy to clipboardprint?
 //焦点行的FocusedHandle为:
  FocuseRow_Handle = -999998;
 //获取焦点行的handle
 ColumnView newview = (ColumnView)gridControl_Gongzi.FocusedView;   

                         FocuseRow_Handle = newview.FocusedRowHandle;
 //回车添加新行
   代码
   private void gridView1_KeyPress(object sender, KeyPressEventArgs e)   

         {
             if (e.KeyChar == 13)
             {
                 ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;
                 if(view.IsLastRow)
                 {
                     if (FocuseRow_Handle == 0)
                     {
                         gridView1.AddNewRow();   

                         ColumnView newview = (ColumnView)gridControl_Gongzi.FocusedView;   

                         newview.FocusedColumn = newview.Columns["bumen"];//定位焦点网格的位置   

                         FocuseRow_Handle = newview.FocusedRowHandle;//获取新焦点行的FocuseRowHandle 并初始化全局变量FocuseRow_Handle供保存操作时判断是upd                                                                       ate还是insert
                     }
时间: 2024-08-08 21:52:27

c#开发_Dev的关于XtraGrid的使用(GridControl小结)的相关文章

在开发中关于javaweb中的路径问题小结

转自http://blog.csdn.net/yinyuehepijiu/article/details/9136117 在javaweb项目中添加配置文件,满足连接数据库配置参数以及其他自定义参数存放,可自己写一个配置文件**.properties,把项目所需的自定义配置信息以名值对的形式写入文件.在项目工程目录下的WebRoot\WEB-INF\classes目录下新建一个conf文件夹专门存放配置文件,然后把**.properties配置文件放到conf中,部署时IDE会自动将其复制到相应

C# 开发BHO IE浏览器辅助对象注册安装小结

C# 创建BHO浏览器插件,仅适用于IE浏览器(对于性能和效率更优的方式用C++) BHO插件是在IE启动进程的时候附加到IE中的Dll,在部署安装的时候用.NET FrameWork进行注册: 注册方式简单直接的为强签名: 使用regasm进行注册: regasm /codebase BHO路径(部署的dll的绝对路,如:'C:\\System32\\BHO.dll') 在.NET Framework4.0环境下用批处理注册示例: %SystemRoot%\Microsoft.NET\Fram

DEV RepositoryItem控件绑定 CheckedComboBoxEdit

尝试在Treelist中绑定RepositoryItemCheckedComboBoxEdit控件,结果会绑定数据,却不知道如何返回数据了,反复了几天. 因为本需求比较奇葩(下拉框值都不一样,显示值与真实值不一样),最后使用动态绑定控件的办法解决的. 也可以不动态绑定控件,但是如果那样的话,CheckedComboBoxEdit控件的下拉框的所有选项都是一样的. 而这里要求每一行的那个单元格下拉框值都不是一样的. 一.如何在Treelist \ Gridcontrol中绑定动态编辑控件 Repo

微信公众平台开发最佳实践(第2版)

<微信公众平台开发最佳实践 第2版>微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 前言 出版说明 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相关文章的日访问量高达2万人次,而<微信公众平台开发入门教程>的阅读量超过50万,博客访问量总计超过500万,成为微信公众平台开发更新最快,传播最广.受众最多.资料最全的博客,很多博文被许多有影响力的网站转载,并被各大搜索引擎收录且排名

大数据挑战与NoSQL数据库技术pdf

下载地址:网盘下载 内容简介 编辑 <大数据挑战与nosql数据库技术>对大数据时代面临的挑战,以及nosql数据库的基本知识做了清晰的阐述,有助于读者整理思路,了解需求,并更有针对性.有选择地深入学习相关知识.[1] 目录 编辑 第1章概论1 1.1引子2 1.2大数据挑战3 1.3大数据的存储和管理5 1.3.1并行数据库5 1.3.2NoSQL数据管理系统6 1.3.3NewSQL数据管理系统8 1.3.4云数据管理11 1.4大数据的处理和分析11 1.5小结13 参考文献13 理论篇

C#中gridView常用属性和技巧介绍

1.隐藏最上面的GroupPanel gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值 sValue=Table.Rows[gridView1.FocusedRowHandle][FieldName].ToString(); 3.数据只读 gridView1.OptionsBehavior.Editable=false; 4.不显示MasterDetailView gridView1.OptionsDetail.EnableM

DEV GridControl小结

1. 如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 2. 如何新增一条记录 (1).gridView.AddNewRow() (2).实现 gridView_InitNewRow 事件 3.如何解决 GridControl 记录能获取而没有显示出来的问题 gridView.populateColumns(); 4.如何让行只能选择而不能编辑(或编辑某一单元格) (1).View->OptionsBehavi

dev 转自

1.隐藏最上面的GroupPanel gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值 sValue=Table.Rows[gridView1.FocusedRowHandle][FieldName].ToString(); 3.数据只读 gridView1.OptionsBehavior.Editable=false; 4.不显示MasterDetailView gridView1.OptionsDetail.EnableM

有容云:实战总结之 利用Docker、Docker Compose &amp;Rancher构建持续部署

前言: 本文由John Patterson . Chris Lunsford写于2016年4月4日,译者有容云张向波,转载请注明出处.(原文链接见文末) 作者John Patterson和Chris Lunsford 运营了一家提供运营和基础架构服务的公司,本文是他们给大家分享的内容:关于如何通过使用Docker.Docker-Compose和Rancher来实现容器部署落地. 我们想跟你一起从头开始体验整个过程,特别是之间遇到的一些痛点和所做的决策.目前,已经有许多的资源和工具可以与Docke