zoukankan      html  css  js  c++  java
  • DevExpress GridControl使用片段

    
    以下代码已经有好多人写过,还望各位多多指教
    
    我只不过是整理了一下在我使用过程中的比较熟悉的,在以后的使用过程中会继续添加
    
    1.gridView 奇行与偶行交替变色
    
    this.gridView1.OptionsView.EnableAppearanceEvenRow = true;
    this.gridView1.OptionsView.EnableAppearanceOddRow = true;
    
    this.gridView1.Appearance.EvenRow.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
    this.gridView1.Appearance.EvenRow.Options.UseBackColor = true;
    this.gridView1.Appearance.OddRow.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
    this.gridView1.Appearance.OddRow.Options.UseBackColor = true;
    2.girdView在第一列显示行号
    
    //调整第一列的宽度
    this.gridView1.IndicatorWidth = 40;
    //添加监听事件
    this.gridView1.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(this.gridView1_CustomDrawRowIndicator);
    //在非类里这段代码
    private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
            ...{
                if (e.Info.IsRowIndicator && e.RowHandle >= 0)
                ...{
                    e.Info.DisplayText = Convert.ToString(Convert.ToInt32(e.RowHandle.ToString())+1);
                }
            }
    3.
    
    GridControl 選中某列進行排序時,怎麼能讓那列高亮顯示 
    winform:
    
    
    在gridView1的"EndSorting"事件中加入以下代碼:
    
    
    private void gridView1_EndSorting(object sender, EventArgs e)
            ...{
                Color clr = gridView1.Appearance.Row.BackColor;
                foreach (DevExpress.XtraGrid.Columns.GridColumn dc in gridView1.Columns)
                ...{
                    if (dc.VisibleIndex == gridView1.SortedColumns[0].VisibleIndex)
                    ...{
                        dc.AppearanceCell.BackColor = Color.Red;
                    }
                    else
                    ...{
                        dc.AppearanceCell.BackColor = clr;
                    }
               }
           }
    webfrom:
    
    在DataGrid的SortCommand事件加入以下代碼:
    其中dg是DataGrid的實例,e是SortCommand事件傳入的DataGridSortCommandEventArgs類型參數
    
    foreach(DataGridColumn dgc in dg.Columns)
    ...{
     if (dgc.SortExpression == e.SortExpression)
     ...{
      dgc.ItemStyle.BackColor = Color.Red;
     }
     else
     ...{
      dgc.ItemStyle.BackColor = Color.White;
     }
    }
    4.
    
    去掉GridControl控件上面的
    Drag a column header here to group by that column
     
    Options\OptionsView\ShowGroupPanel      True----->False
    
    
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hlzhs/archive/2008/05/19/2459118.aspx
    
    public Form2()
            {
                InitializeComponent(); 
    
                //不显示内置的导航条。
                gc1.UseEmbeddedNavigator = false;
    
                //不显示分组的面板
                gv1.OptionsView.ShowGroupPanel = false;
                gv2.OptionsView.ShowGroupPanel = false;
    
                //自动改变行高适应内容
                gv1.OptionsView.RowAutoHeight = true;
                gv2.OptionsView.RowAutoHeight = true;
    
                //允许自动合并单元格
                gv1.OptionsView.AllowCellMerge = true;
    
                //如果主从表中,没有找到从表内容也要显示(默认是不显示的)
                gv1.OptionsDetail.AllowExpandEmptyDetails = true;
    
                //显示自动筛选行(效果跟Excel的自动筛选差不多)
                gv2.OptionsView.ShowAutoFilterRow = true;
    
                //使得GridView不能编辑
                gv1.OptionsBehavior.Editable = false;
                gv2.OptionsBehavior.Editable = false;
    
                //内置编辑器显示的模式
                gv1.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.Click;
    
                //主从表显示的功能是否可用
                //gv1.OptionsDetail.EnableMasterViewMode = false;
    
                //如果显示了主从表,每点开个加号,就会显示一个Tabs,里面往往显示了两个面板。
                //事实上没必要这样干的。一般选择关闭。关闭的对象是主GridView的此项属性。
                gv1.OptionsDetail.ShowDetailTabs = false;
    
                
            }
    
            private void btnExit_Click(object sender, EventArgs e)
            {
                this.Close();
    
            }
    
            private void btnOk_Click(object sender, EventArgs e)
            {
                //设置连接字符串
                DbHelperSQL.ConnectionString = DbHelperSQL.CreateConnectionString(@"BUDDHAS\SQLEXPRESS", "sa", "00000", "RTDMES");
    
                DataSet ds = new DataSet();
                //父GridView的数据
                string sql = "select sc_prno,sc_prna from mespb04h";
                DbHelperSQL.QueryD(sql,ds,"main");
    
                //子GridView的数据
                sql = "select pa_name,pa_no,sc_prno from mespb09h";
                DbHelperSQL.QueryD(sql,ds,"son");
    
                //这个是显示主从表的关键,一、GridControl通过检查DataSet.Relations的内容来分析数据
                //二、关键名必须与设计GridView的层级关系的level name相同,否则,结果在意料之外。
                DataRelation relation = new DataRelation("aa", 
                                                         ds.Tables["main"].Columns["sc_prno"], 
                                                         ds.Tables["son"].Columns["sc_prno"]);
                
                ds.Relations.Add(relation);
    
                //这也是一个关键,不能直接设为:ds,必须指明到表。
                gc1.DataSource = ds.Tables["main"];
            }
    
      上面的代码是显示一个主从表。显示主从表有些技巧。文档中还没有说出来,俺摸索了一个晚上才搞出来。像上面看到的,事实上很简单。
    
      上面DbHelperSQL是我从CodeMatic 2.0中搞出来的,我自己修改了一下。
    
      上面代码的效果图如下:
    
       
    
      
    
      对于GridView,我有两大疑问:
    
      一、显示主从表,这个解决了。
    
      二、分组显示,这是报表中经常要用到的,GridView的解决方案很简捷,只需将相应列的GroupIndex属性设一下就成了:
    
        在gridcontrol上击右键,选run designer进入设计模式。在columns栏内点retrieve fields将数据源中所有字段导入进来。
    
     点需要分组的字段,在其属性栏的groupindex依次设为0,1..,在不需要分组的字段上保持-1不变。
    
     进入feature browse/summary /group sammary /summary items中增加要分组进行统计的字段。这里要设其fieldname字段名,showingroupcolumnfooter 显示在哪一栏位,sammarytype显示分组后统计的字段是进行sum(求和,求平均,最大值,最小值等)
    
     在grouping /behavior /grneral /可设两个属性
    autoexpandallgroups 设为true时将所有分组展开,反之折叠。
     showgroupedcolumns是否在网格是显示你分组依据的哪些字段,false为不显示
    
       同样在feature browse/summary /total sammary 这些不是针对分组,而是针对所有行。在summaryitem中对要处理的列进行设置,主要设置需要处理列的column,summarytype.
    
    
    当然设好后要将optionview的showfooter属性设为true,表格底部会出现一summary行。
    
      补:另有三个属性需要用,我们查询的结果一般是只读的,并且对每一个单元格最好无焦点,故可同时选所有字段,设allowedit为false;allowfocus为false;readonly为true;
    
    为XtraGrid的GridView加行号。示例代码如下:
    
            //设置行指示器的宽度(行指示器就是最左边那列什么都不显示的列)
            //默认情况下,如果要在里面显示行号的话,宽度会不足,数字显示不清晰
            //所以要改一下宽度
            gv1.IndicatorWidth = 20;
    
            private void gv1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
            {
                if (e.Info.IsRowIndicator && e.RowHandle >= 0)
                {
                    e.Info.DisplayText = (e.RowHandle + 1).ToString().Trim();
                }
            }
    
      效果图如下:
    
      
    
      常用代码:
    
    //添加分组统计字段
    gridView1.GroupSummary.Add(SummaryItemType.Count, "Product Name", gridView1.Columns["Product Name"]);
    gridView1.GroupSummary.Add(SummaryItemType.Average, "Unit Price", gridView1.Columns["Unit Price"]);
    
    //设置分组统计字段的显示格式
    ((GridSummaryItem)gridView1.GroupSummary[gridView1.GroupSummary.Count - 1]).DisplayFormat = "AVR={0:c}";
    
    //设置分组字段
    gridView1.Columns["Discontinued"].GroupIndex = 0;
    
    //打开所有分组
    gridView1.ExpandAllGroups();
    
    //为控件画边框
    ControlPaint.DrawBorder3D(e.Graphics,
                              r, 
                              (e.Info.State == DevExpress.Utils.Drawing.ObjectState.Pressed ? Border3DStyle.SunkenOuter
    
    : Border3DStyle.RaisedInner));
    
    
    //焦点单元格的列
    gridview1.FocusedColumn
    
    //焦点单元格所在行的行号
    gridview1.FocusedRowHandle
    
    //焦点单元格的值
    gridview1.FocusedValue
    
    //指定单元格显示的字符串值
    gridview1.GetRowCellDisplayText(int rowHandler,string feildName)
    
    //指定单元格的值
    gridview1.GetRowCellValue(int rowHandler,string feildName)
    
    //设置焦点单元格所在行指定列的值
    gridview1.SetFocusedRowCellValue(GridColumn col,object value)
    
    //设置焦点单元格的值
    gridview1.SetFocusedValue(object value)
    
    //设置指定单元格的值
    //有了这个函数,就可以手工创建行了。
    gridview1.SetRowCellValue(int rowHandler,string feildName,object value)
    gridview1.SetRowCellValue(int rowHandler,GridColumn col,object value)
    
    //添加新行的方法
    
    gv1.AddNewRow();
    foreach (GridColumn col in gv1.Columns)
    {
      //用RowCount-1的办法是不行的
      //gv1.SetRowCellValue(gv1.RowCount-1, col, "aaaaa");
      gv1.SetRowCellValue(gv1.FocusedRowHandle, col, "aaaaa");
    }
    
    gv1.UpdateCurrentRow();
    
    //根据绑定的数据源自动产生列
    
    gv1.PopulateColumns();
    
    //为列添加下拉列表(加其他类型如日期、UpDown同理)
    RepositoryItemLookUpEdit ri = new RepositoryItemLookUpEdit();
    //ri.PopupWidth = 200;
    ri.DisplayMember = "sc_prna";
    ri.ValueMember = "sc_prno";
    DataTable dt1 = DbHelperSQL.QueryT("select sc_prno,sc_prna from mespb04h");
    ri.DataSource = dt1;
    gv1.Columns["sc_prno"].ColumnEdit = ri;
    
    
  • 相关阅读:
    uva 408 Uniform Generator
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
  • 原文地址:https://www.cnblogs.com/xiaofengfeng/p/2037024.html
Copyright © 2011-2022 走看看