Dev 笔记 快速开发 GridControl 和 GridLookUpEdit

一、存储表所有字段信息
存储表所有字段信息

CREATE TABLE [dbo].[TableDetail]
(
    [ISID] [int] NOT NULL,-- 序号
    [TableName] [varchar] (30)  NOT NULL,--表名称
    [FileNames] [varchar] (30)  NOT NULL,--字段么
    [FILETYPE] [varchar] (20)  NULL,
    [SFNULL] [varchar] (1)  NULL,
    [SFKEY] [varchar] (1)  NULL,
    [ISIdentity] [varchar] (1)  NULL,
    [LONG] [int] NULL,
    [DEFAULTS] [nvarchar] (100)  NULL,
    [REM] [nvarchar] (50)  NOT NULL,
    [REMARK] [nvarchar] (500)  NOT NULL,
    [Name] [varchar] (50)  NULL, --表名称中文描述
    [type2] [varchar] (20)  NULL,
    [IsEdit] [varchar] (2)  NULL CONSTRAINT [DF__TableDeta__IsEdi__4D555BD0] DEFAULT ('T'),
    [DecimalSize] [int] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TableDetail] ADD CONSTRAINT [PK__TableDet__5769799B438BFA74] PRIMARY KEY CLUSTERED  ([TableName], [FileNames]) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [Index_TableDetail_TableName] ON [dbo].[TableDetail] ([TableName]) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [Index_TableDetail_FileNames] ON [dbo].[TableDetail] ([FileNames]) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [Index_TableDetail_ISID] ON [dbo].[TableDetail] ([ISID]) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [Index_TableDetail_TableName_FileNames] ON [dbo].[TableDetail] ([TableName], [FileNames]) ON [PRIMARY]
GO


表数据:

◆ 获取数据库表中 数据表的个字段的详细属性:字段名、描述、长度、字段类型等等。

---------------
-- 判断要创建的存储过程名是否存在
IF exists (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].P_Add_TB_Mark') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
-- 删除存储过程
DROP procedure [dbo].P_Add_TB_Mark
GO
CREATE PROC P_Add_TB_Mark
@tablename varchar(60),
@tableRem varchar(100)
AS 

DELETE dbo.TableDetail WHERE TableName = @tablename

INSERT INTO dbo.TableDetail(ISID,TableName,FileNames,FILETYPE,SFNULL,SFKEY,ISIdentity,LONG,DecimalSize,DEFAULTS,REM,IsEdit,type2,NAME,REMARK)
SELECT
    ROW_NUMBER() OVER (ORDER BY C.name) AS ISID,
    @tablename  AS TableName,
     CONVERT(varchar(100), c.NAME) as FileNames,
     CONVERT(varchar(100),t.NAME) as FILETYPE,
     convert(bit,c.IsNullable)  as SFNULL,
     CONVERT(bit,case when exists(select 1 from sysobjects where xtype='PK' and parent_obj=c.id and name in (
         select name from sysindexes where indid in(
             select indid from sysindexkeys where id = c.id and colid=c.colid))) then 1 else 0 end) 
     AS  SFKEY
     ,convert(bit,COLUMNPROPERTY(c.id,c.name,'IsIdentity')) as ISIdentity 
     ,COLUMNPROPERTY(c.id,c.name,'PRECISION') as LONG
     ,isnull(COLUMNPROPERTY(c.id,c.name,'Scale'),0) as DecimalSize
     ,CONVERT(varchar(100),ISNULL(CM.text,'')) as DEFAULTS
     ,CONVERT(varchar(100),isnull(ETP.value,'')) AS REM,
     'T' IsEdit,
     (
     CASE WHEN t.name ='int' THEN '数值'
       WHEN t.name ='numeric' THEN '数值'
       WHEN t.name ='datetime' THEN '时间' 
     ELSE '文本'
     END 
     )as  type2,
     @tableRem as   NAME,
      CONVERT(varchar(100), c.NAME) REMARK     
from syscolumns c
inner join systypes t on c.xusertype = t.xusertype 
left join sys.extended_properties ETP on ETP.major_id = c.id and ETP.minor_id = c.colid and ETP.name ='MS_Description' 
left join syscomments CM on c.cdefault=CM.id
where c.id = object_id(@tablename)

 ◆ 基础信息表的创建和字段描述

--------------------------------------------------------------------------------------------------------------------
-- 判断要创建的表名是否存在
IF  exists (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[LanMFBase]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
    -- 删除表
    DROP TABLE [dbo].[LanMFBase]
END
GO
CREATE TABLE [dbo].[LanMFBase]
(    
    [Guid] VARCHAR(60) DEFAULT(NEWID()),
    [type] [varchar] (60)  NOT NULL,
    [typeDesc] [varchar] (300)  NULL,
    [Field] [varchar] (100)  NOT NULL,
    [FieldDesc] [varchar] (300)  NULL,
    [Switch] [varchar] (100)  NULL,
    [Switch2] [varchar] (100)  NULL,
    [Rem] [varchar] (300)  NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[LanMFBase] ADD CONSTRAINT [PK__LanMFBas__B7191643276EDEB3] PRIMARY KEY CLUSTERED  ([type] DESC, [Field] DESC) ON [PRIMARY]
GO

INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '费用管控','1' ,'管控' ,'' ,'' ,'' ,'基础数据')
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '费用管控','2' ,'提示' ,'' ,'' ,'' ,'基础数据')
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '费用管控','3' ,'不管控' ,'' ,'' ,'' ,'基础数据')
GO
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '客户类别','1' ,'客户' ,'C' ,'' ,'' ,'基础数据')
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '客户类别','2' ,'供应商' ,'G' ,'' ,'' ,'基础数据')
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '客户类别','3' ,'其他' ,'Q' ,'' ,'' ,'基础数据')
GO
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '客户类型','1' ,'金卡' ,'' ,'' ,'' ,'基础数据')
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '客户类型','2' ,'银卡' ,'' ,'' ,'' ,'基础数据')
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '客户类型','3' ,'翡翠卡' ,'' ,'' ,'' ,'基础数据')
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '客户类型','4' ,'一般婴童' ,'' ,'' ,'' ,'基础数据')
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '客户类型','5' ,'超标' ,'' ,'' ,'' ,'基础数据')
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '客户类型','6' ,'药店' ,'' ,'' ,'' ,'基础数据')
INSERT INTO dbo.LanMFBase( type ,typeDesc ,Field ,FieldDesc ,Switch ,Switch2 ,Rem)VALUES  ( '客户类型','7' ,'系统' ,'' ,'' ,'' ,'基础数据')
GO



ALTER PROC    P_Save_Base 
@guid VARCHAR(60),
@type varchar (60),
@typeDesc varchar (300),
@Field varchar (100),
@FieldDesc varchar (300),
@Switch varchar (100),
@Switch2 varchar (100),
@Rem varchar (300)  
AS 
IF EXISTS(SELECT TOP 1 1 FROM dbo.LanMFBase WHERE [guid]=@guid)
BEGIN
    UPDATE LanMFBase 
    SET [type] = @type ,
    Field = @Field,
    typeDesc = @typeDesc,
    FieldDesc = @FieldDesc ,
    Switch = @Switch,
    Switch2 = @Switch2 ,
    Rem = @Rem
    WHERE  [guid]=@guid
END
ELSE 
BEGIN
    INSERT INTO LanMFBase([guid],[type],typeDesc,Field,FieldDesc,Switch,Switch2,Rem) 
    VALUES (@guid,@type,@typeDesc,@Field,@FieldDesc,@Switch,@Switch2,@Rem) 
END
GO

◆ 下拉框绑定的数据源和下拉框表的样式数据来源

------------------------------------------------------------
-- 判断要创建的存储过程名是否存在
IF exists (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].P_Get_OptionVale') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
-- 删除存储过程
DROP procedure [dbo].P_Get_OptionVale
GO
CREATE PROC P_Get_OptionVale
    @Mark VARCHAR(60) /*
    EXEC  P_Get_OptionVale '销售类型'
    仓库、客户、业务员、部门、供应商、
    LanMFBase:销售类型、采购类型,产品分类,费用管控,客户类别,客户类型;
    ValueMember //相当于Editvalue 实际要用的字段
    DisplayMember//相当于Text  要显示的字段;
          ValueMember  DisplayMember
    */
AS
IF(@Mark='部门') 
BEGIN  
    SELECT DepNO AS ValueMember,DeptName AS DisplayMember,DepNO,DeptName FROM dbo.Dept;
    -----------------------------------
    SELECT FileNames,REM,LONG,type2,DecimalSize,IsEdit
    FROM   dbo.TableDetail 
    WHERE   TableName = 'Dept' AND FileNames IN ('DepNO','DeptName')  
    ORDER BY ISID ASC
END  
IF(@Mark='仓库') 
BEGIN  
    SELECT DepNO AS ValueMember,DepotName AS DisplayMember,DepNO,DepotName FROM Depot;
    -----------------------------------
    SELECT FileNames,REM,LONG,type2,DecimalSize,IsEdit
    FROM   dbo.TableDetail 
    WHERE   TableName = 'Depot' AND FileNames IN ('DepNO','DepotName')  
    ORDER BY ISID ASC
END  
--
IF(@Mark='客户') 
BEGIN --ValueMember  DisplayMember
    SELECT CusNo AS ValueMember,Name AS DisplayMember,CusNo,SimpName,Name,ClientSort,[Address] FROM dbo.Client WHERE  ClientSort = '客户';
    -----------------------------------
    SELECT FileNames,REM,LONG,type2,DecimalSize,IsEdit
    FROM   dbo.TableDetail 
    WHERE   TableName = 'Client' AND FileNames IN ('CusNo','SimpName','Name','ClientSort','Address')  
    ORDER BY ISID ASC
END  
--
IF(@Mark='供应商') 
BEGIN --ValueMember  DisplayMember
    SELECT CusNo AS ValueMember,Name AS DisplayMember,CusNo,SimpName,Name,ClientSort,[Address] FROM dbo.Client WHERE  ClientSort = '供应商';
    -----------------------------------
    SELECT FileNames,REM,LONG,type2,DecimalSize,IsEdit
    FROM   dbo.TableDetail 
    WHERE   TableName = 'Client' AND FileNames IN ('CusNo','SimpName','Name','ClientSort','Address')  
    ORDER BY ISID ASC
END  
--
IF(@Mark='业务员' OR @Mark='员工表' OR @Mark='员工' ) 
BEGIN--ValueMember  DisplayMember
    SELECT EmpID AS ValueMember,EmpName AS DisplayMember,EmpID,EmpName,Sex FROM dbo.Employee;
    -----------------------------------
    SELECT FileNames,REM,LONG,type2,DecimalSize,IsEdit
    FROM   dbo.TableDetail 
    WHERE   TableName = 'Employee' AND FileNames IN ('EmpID','EmpName','Sex')  
    ORDER BY ISID ASC;
END 
--LanMFBase:销售类型、采购类型,产品分类,费用管控,客户类别,客户类型,销售类型
IF(@Mark='销售类型') 
BEGIN--ValueMember  DisplayMember
    SELECT Field AS ValueMember,Field AS DisplayMember,[type],Field FROM LanMFBase WHERE [type]='销售类型' ORDER BY typeDesc ASC;
    -----------------------------------
    SELECT FileNames,REM,LONG,type2,DecimalSize,IsEdit
    FROM  dbo.TableDetail 
    WHERE TableName = 'LanMFBase' AND FileNames IN ('type','Field');
END
--ValueMember  DisplayMember
IF(@Mark='采购类型') 
BEGIN
    SELECT Field AS ValueMember,Field AS DisplayMember,[type],Field FROM LanMFBase WHERE [type]='采购类型' ORDER BY typeDesc ASC;
    -----------------------------------
    SELECT FileNames,REM,LONG,type2,DecimalSize,IsEdit
    FROM  dbo.TableDetail 
    WHERE TableName = 'LanMFBase' AND FileNames IN ('type','Field');
END
--
IF(@Mark='产品分类') 
BEGIN
    SELECT Field AS ValueMember,Field AS DisplayMember,[type],Field FROM LanMFBase WHERE [type]='产品分类' ORDER BY typeDesc ASC;
    -----------------------------------
    SELECT FileNames,REM,LONG,type2,DecimalSize,IsEdit
    FROM  dbo.TableDetail 
    WHERE TableName = 'LanMFBase' AND FileNames IN ('type','Field');
END
--
IF(@Mark='费用管控') 
BEGIN
    SELECT Field AS ValueMember,Field AS DisplayMember,[type],Field FROM LanMFBase WHERE [type]='费用管控' ORDER BY typeDesc ASC;
    -----------------------------------
    SELECT FileNames,REM,LONG,type2,DecimalSize,IsEdit
    FROM  dbo.TableDetail 
    WHERE TableName = 'LanMFBase' AND FileNames IN ('type','Field');
END
--
IF(@Mark='客户类别') 
BEGIN
    SELECT Field AS ValueMember,Field AS DisplayMember,[type],Field FROM LanMFBase WHERE [type]='客户类别' ORDER BY typeDesc ASC;
    -----------------------------------
    SELECT FileNames,REM,LONG,type2,DecimalSize,IsEdit
    FROM  dbo.TableDetail 
    WHERE TableName = 'LanMFBase' AND FileNames IN ('type','Field');
END
--
IF(@Mark='客户类型') 
BEGIN
    SELECT Field AS ValueMember,Field AS DisplayMember,[type],Field FROM LanMFBase WHERE [type]='客户类型' ORDER BY typeDesc ASC;
    -----------------------------------
    SELECT FileNames,REM,LONG,type2,DecimalSize,IsEdit
    FROM  dbo.TableDetail 
    WHERE TableName = 'LanMFBase' AND FileNames IN ('type','Field');
END 

GO


 

 二、DEV / C#调用的通用方法:

        /// <summary>
        /// GridControl 设置的通用方法
        /// </summary>
        /// <param name="dt">列属性:数据表</param>
        /// <param name="gridView1">gridView1</param>
        /// <param name="IndicatorWidth">排序列宽度</param>
        /// <param name="NameSpacePath">实例:命名空间.类名</param>
        /// <param name="boolEdit">是否控制单元格的值的修改</param>
        /// <param name="ifCheck">是否添加“复选框”列;true:添加复选框;false:不添加复选框列</param>
        public void GetSetGridContrl(DataTable dt, GridView gridView1, int IndicatorWidth, string NameSpacePath, bool boolEdit,bool ifCheck)
        {
            //设置列索引为-1的列宽
            gridView1.IndicatorWidth = IndicatorWidth;
            gridView1.OptionsView.ShowAutoFilterRow = true;
            gridView1.OptionsView.ColumnAutoWidth = false;
            //自动列宽,会出现横向滚动条
            gridView1.OptionsView.ColumnAutoWidth = false;
            //自动列宽
            gridView1.BestFitColumns();
            gridView1.Appearance.OddRow.BackColor = Color.PaleGoldenrod;  // 设置奇数行颜色 // 默认也是白色 可以省略 
            gridView1.OptionsView.EnableAppearanceOddRow = true;   // 使能 // 和和上面绑定 同时使用有效 
            gridView1.Appearance.EvenRow.BackColor = Color.WhiteSmoke; // 设置偶数行颜色 
            gridView1.OptionsView.EnableAppearanceEvenRow = true;   // 使能 // 和和上面绑定 同时使用有效
            gridView1.OptionsView.ShowGroupPanel = false;
            string FileNames = "", REM = "", LONG = "", type2 = "", DecimalSize = "4", IsEdit = "T"; 
            if(ifCheck==true)
            {
                gridView1.OptionsSelection.MultiSelect = true;
                gridView1.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
                gridView1.OptionsSelection.ShowCheckBoxSelectorInColumnHeader = DevExpress.Utils.DefaultBoolean.True; 
            }
            try
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    FileNames = dt.Rows[i]["FileNames"].ToString();
                    REM = dt.Rows[i]["REM"].ToString();
                    LONG = dt.Rows[i]["LONG"].ToString();
                    type2 = dt.Rows[i]["type2"].ToString();
                    DecimalSize = dt.Rows[i]["DecimalSize"].ToString();
                    IsEdit = dt.Rows[i]["IsEdit"].ToString();
                    //创建 gridview1 列的对象
                    DevExpress.XtraGrid.Columns.GridColumn Col1 = new DevExpress.XtraGrid.Columns.GridColumn();
                    try
                    {//根据数据库表中设置的列的宽度
                        Col1.Width = Convert.ToInt32(LONG);
                    }
                    catch (Exception ex)
                    {
                        Col1.Width = 100;//默认列宽度:100
                    }
                    Col1.Tag = FileNames;
                    Col1.Name = "Col" + FileNames;//设置控件列Name属性值
                    Col1.FieldName = FileNames;//数据源字段绑定
                    Col1.Caption = REM;
                    if (type2 == "时间")
                    {   //设置日期时间格式
                        Col1.DisplayFormat.FormatType = FormatType.DateTime;
                        Col1.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
                    }
                    if (type2 == "数值")
                    {
                        //Col1.DisplayFormat.FormatString = "N4";  
                        //设置Numeric小数位数长度
                        Col1.DisplayFormat.FormatString = "N" + DecimalSize;
                        Col1.DisplayFormat.FormatType = FormatType.Numeric;
                    }
                    Col1.VisibleIndex = i;
                    if (FileNames == "ValueMember" || FileNames == "DisplayMember")//出现隐藏字段
                    {//VisibleIndex = -1;时 列自动隐藏                        
                        Col1.VisibleIndex = -1;
                    }
                    if (boolEdit == true && IsEdit == "F")
                    {
                        //AllowEdit = false 不允许修改 
                        Col1.OptionsColumn.AllowEdit = false;
                    }
                    gridView1.Columns.Add(Col1);
                }
            }
            catch (Exception)
            {

            }
            //这里设置gridView样式文件保存路径;
            string xmlfile = path + NameSpacePath.Replace(".", "") + "_" + gridView1.Name + ".xml";
            gridView1.Tag = xmlfile;
            //添加 行索引事件:添加行号。
            gridView1.CustomDrawRowIndicator += gridView1_CustomDrawRowIndicator;            
            gridView1.Layout += gridView1_Layout;//布局变化时激发事件:gridView1_Layout
            //加载gridView样式文件              
            if (File.Exists(xmlfile)) { gridView1.RestoreLayoutFromXml(xmlfile); }
            gridView1.OptionsView.ShowFooter = true;
            //设置gridView选中行字体颜色
            gridView1.RowStyle += gridView1_RowStyle;
        }
        /// <summary>
        /// 添加行号 和 筛选行筛选是不用输入百分号 %
        /// </summary> 
        public static void gridView1_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
        {
            GridView gridView1 = (GridView)sender;
            //设置行索引:列索引等于-1处设置行索引。
            if (e.Info.IsRowIndicator && e.RowHandle >= 0)
            {
                e.Info.DisplayText = (e.RowHandle + 1).ToString();
            }
            //设置筛选行不用输入百分号直接筛选
            foreach (DevExpress.XtraGrid.Columns.GridColumn item in gridView1.Columns)
            {
                item.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains;   //筛选条件设置为包含    
            }

        }
        /// <summary>
        /// 设置选中行字体颜色
        /// </summary> 
        public void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
        {
            GridView gridView1 = (GridView)sender;
            gridView1.Appearance.FocusedRow.ForeColor = Color.Red;//字体颜色
            gridView1.Appearance.FocusedRow.BackColor = Color.Linen;//行背景颜色
        }

◆ 设置GridLookUpEdit下拉框设置

        /// <summary>
        /// 设置GridLookUpEdit下拉框 gridview控件样式,自动添加列 绑定数据源
        /// </summary>
        /// <param name="strype">类型名</param>
        /// <param name="glue">控件对象</param>
        public void GridLookUpEditSetData(string strype, GridLookUpEdit glue)
        {
            string NameSpacePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName;
            try
            {
                //此方法从数据库 获取下拉框数据源表 和 GridView的每列的列名、字段类型、宽度等等属性
                DataSet ds = new MFBase().GetP_Get_OptionVale(strype);//获取当前类所在程序集根路径以及类型名称:ECSHOPV2.Sale.FormSale                
               
                GridMethod gmthod = new GridMethod();
                gmthod.GetSetGridContrl(ds.Tables[1], (GridView)glue.Properties.View, 35, NameSpacePath + strype);
                glue.Properties.ValueMember = "ValueMember";//设置下拉框 实际值 字段
                glue.Properties.DisplayMember = "DisplayMember";//设置下拉框 显示值 字段
                glue.Properties.DataSource = ds.Tables[0];

                DataRow drr = ds.Tables[0].NewRow();
                ds.Tables[0].Rows.InsertAt(drr, 0);
                glue.Properties.NullText = "--请选择--";//未选择内容时,默认显示文本

                gmthod.ColumnVisibleIndex((GridView)glue.Properties.View);//设置自动隐藏的列
            }
            catch (Exception)
            {
            }
        }

◆ gridControl 中 GridView 的样式加载

        /// <summary>
        /// 加载 gridControl 中 GridView 的样式加载
        /// </summary>
        /// <param name="TableName">需要查询的表的名称</param>
        /// <param name="gv">gridControl 中 GridView 对象</param>
        public void GridViewLoadStyle(string TableName, GridView gv)
        {
            //获取当前窗体类型名 DeclaringType:获取声明该成员的类 FullName
            string NameSpacePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName;
            try
            {
                DataTable dtLanMFBase = new BasicData().GetDataTableField(TableName);//获取当前类所在程序集根路径以及类型名称:ECSHOPV2.Sale.FormSale                
                new GridMethod().GetSetGridContrl(dtLanMFBase, gv, 35, NameSpacePath + TableName);//公用方法,加载GridContrl表格样式
            }
            catch (Exception)
            {
            } 
        } 

◆ 控件调用代码:

private void frmBPuAdd_Load(object sender, EventArgs e)
        {
            string fieldstr = ""; 
设置GridLookUpEdit下拉框 gridview控件样式,自动添加列 绑定数据源
GridLookUpEditSetData("员工", gridLookUpEditHandlePerson);
GridLookUpEditSetData("仓库", gridLookUpEditDepot);
GridLookUpEditSetData("供应商", gridLookUpEditSupplier);
GridLookUpEditSetData("采购类型", gridLookUpEditStorageType); 
GridLookUpEditSetData(
"部门", gridLookUpEditDept);
//------------------------------------
GridViewLoadStyle("v_PurchDetail", gridView1);
gridControl 中 GridView 的样式加载
v_PurchDetail 必须得在字段表中文维护 表字段各属性值

 ◆ 单元格输入值 校验

        /// <summary>
        /// 单价和数量 填写时,必须是数值,否则不行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void gridView1_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
        { 
            if (gridView1.FocusedColumn.Name == "ColQty" || gridView1.FocusedColumn.Name=="ColPrice")
            {
                if (e.Value != null)
                {
                    try
                    {
                        Convert.ToDouble(e.Value);
                    }
                    catch (Exception)
                    {
                        e.ErrorText = "只能输入正数,包括整数和浮点数!";//输入的值 不符合规范是,异常文字提示
                        e.Valid = false;
                        return;
                    }
                }
            }
        }

◆ 删除当前选中行 

            gridView1.DeleteSelectedRows();//执行删除行,但是行仍然存在
            DataTable dttemp = gridControl1.DataSource as DataTable;//获取数据源表
            dttemp.AcceptChanges();//彻底删除行:提交自上次调用 System.Data.DataTable.AcceptChanges() 以来对该表进行的所有更改。

 ◆ 添加复选框

            gridView1.OptionsSelection.MultiSelect = true;
            gridView1.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
            gridView1.OptionsSelection.ShowCheckBoxSelectorInColumnHeader = DevExpress.Utils.DefaultBoolean.True;

获取已勾选行 和 列的相应字段值

            for (int i = 0; i < this.gridView1.RowCount; i++)
            {
                if (this.gridView1.IsRowSelected(i))//遍历获取当前勾选的行
                {
                    CheckPerson = this.gridView1.GetDataRow(i)["CheckPerson"].ToString();//获取指定列的值:数据源字段值
                    PurchGuid = this.gridView1.GetDataRow(i)["PurchGuid"].ToString();
                    if (CheckPerson=="")
                    {
                        lst.Add(PurchGuid);
                    }
                }
            }

 ◆ 获取当前选中行的某列的值

 ((DataRowView)(gridView1.GetFocusedRow())).Row["PurchGuid"].ToString(); 

◆ 修改单元格的值

更新指定行的指定的列的值

this.gridView1.SetRowCellValue(i, gridView1.Columns["jianshu"], xcjianshu.ToString()); 

更新选中行的单元格的值

gridView1.SetFocusedRowCellValue("IsPrint", "已打印");//更新当前选中行订单打印状态
原文地址:https://www.cnblogs.com/lanyubaicl/p/10784899.html