zoukankan      html  css  js  c++  java
  • DEVexpress GridControl 属性设置

    1、 如何解决单击记录整行选中的问题

    View->OptionsBehavior->EditorShowMode 设置为:Click

    2、 如何新增一条记录

    (1)、gridView.AddNewRow()

    (2)、实现 gridView_InitNewRow 事件

    3、如何解决 GridControl 记录能获取而没有显示出来的问题

    gridView.populateColumns();

    4、如何让行只能选择而不能编辑(或编辑某一单元格)

    (1)、View->OptionsBehavior->EditorShowMode 设置为:Click

    (2)、View->OptionsBehavior->Editable 设置为:false

    5、如何禁用 GridControl 中单击列弹出右键菜单

    设置 Run Design->OptionsMenu->EnableColumnMenu 设置为:false

    6、如何隐藏 GridControl 的 GroupPanel 表头

    设置 Run Design->OptionsView->ShowGroupPanel 设置为:false

    7、如何禁用 GridControl 中列头的过滤器 过滤器如下图所示:     

    设置 Run Design->OptionsCustomization->AllowFilter 设置为:false

    8、如何在查询得到 0 条记录时显示自定义的字符提示/显示 如图所示:

    方法如下:

    //When no Records Are Being Displayed

    private void gridView1_CustomDrawEmptyForeground(object sender, CustomDrawEventArgs e)

    {

     //方法一(此方法为GridView设置了数据源绑定时,可用)

     ColumnView columnView = sender as ColumnView;

    BindingSource bindingSource = this.gridView1.DataSource as BindingSource;

    if(bindingSource.Count == 0)

    {

    string str = "没有查询到你所想要的数据!";

    Font f = new Font("宋体", 10, FontStyle.Bold);

    Rectangle r = new Rectangle(e.Bounds.Top + 5, e.Bounds.Left + 5, e.Bounds.Right - 5, e.Bounds.Height - 5);

    e.Graphics.DrawString(str, f, Brushes.Black, r); }

    //方法二(此方法为GridView没有设置数据源绑定时,使用,一般使用此种方 法)

    if (this._flag)

     { if (this.gridView1.RowCount == 0)

     { string str = "没有查询到你所想要的数据!"; Font f = new Font("宋体", 10, FontStyle.Bold);

    Rectangle r = new Rectangle(e.Bounds.Left + 5, e.Bounds.Top + 5, e.Bounds.Width - 5, e.Bounds.Height - 5);

    e.Graphics.DrawString(str, f, Brushes.Black, r); } } }

    9、如何显示水平滚动条?或

    设置 this.gridView.OptionsView.ColumnAutoWidth = false;

    .....列表宽度自适应内容

    gridview1.BestFitColumns();

    10、如何定位到第一条数据/记录?

    设置 this.gridView.MoveFirst()

    11、如何定位到下一条数据/记录?
    设置 this.gridView.MoveNext()

    12、如何定位到最后一条数据/记录?

    设置 this.gridView.MoveLast()

    13、设置成一次选择一行,并且不能被编辑

    this.gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;

     this.gridView1.OptionsBehavior.Editable = false;

    this.gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;

     14、如何显示行号?
      private void gvPayList_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
            {
                e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
                if (e.Info.IsRowIndicator)
                {
                    if (e.RowHandle >= 0)
                    {
                        e.Info.DisplayText = (e.RowHandle + 1).ToString();
                    }
                    else if (e.RowHandle < 0 && e.RowHandle > -1000)
                    {
                        e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite;
                        e.Info.DisplayText = "G" + e.RowHandle.ToString();
                    }
                }
            }

    15、如何让各列头禁止移动?

    设置 gridView1.OptionsCustomization.AllowColumnMoving = false;

    16、如何让各列头禁止排序?

    设置 gridView1.OptionsCustomization.AllowSort = false;

    17、如何禁止各列头改变列宽?

    设置 gridView1.OptionsCustomization.AllowColumnResizing = false;

    18.拖动滚动条时固定某一列

    设置Columns,选择要固定的列。设置Fixed属性,可以选择:固定在左边、固定在右边、不固定。

    19.获取选定行,指定列单元格的内容

          return gridView1.GetRowCellValue(pRows[0], ColumName).ToString ();

    20.分组显示

    OptionsView>OptionsBehavior>AutoExpandAllGroups = True
    选择要分组的列,将GroupIndex属性设置为0

    21.格式化数据

           private void gvList_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
            {
                if (this.gvList.FocusedColumn.FieldName == "passQty")
                {
                    string passQty = e.Value.ToString().Trim();
                    int receiveQty = orderDetailList[this.gvList.FocusedRowHandle].qty;
                    if (!JXType.IsIntBigThanZero(passQty))
                    {
                        e.Valid = false;
                        e.ErrorText = "合格数量必须为大于等于0小于等于接货数量的整数!";
                    }
                    else
                    {
                        if (int.Parse(passQty) > receiveQty)
                        {
                            e.Valid = false;
                            e.ErrorText = "合格数量必须为大于0小于等于接货数量的整数!";
                        }
                    }
                }

    }

    22.合并表头

      ///初始化表格

    using DevExpress.XtraGrid.Columns;
    using DevExpress.XtraGrid.Views.Base;
    using DevExpress.XtraGrid.Views.BandedGrid;
    using DevExpress.XtraEditors.Repository;
            private void InitGrid()
            {
                // advBandedGridView1是表格上的默认视图,注意这里声明的是:BandedGridView
                BandedGridView view = advBandedGridView1 as BandedGridView;
                view.BeginUpdate(); //开始视图的编辑,防止触发其他事件
                view.BeginDataUpdate(); //开始数据的编辑
                view.Bands.Clear();

                view.OptionsView.ShowColumnHeaders = false;                         //因为有Band列了,所以把ColumnHeader隐藏
                //添加列标题
          //添加列标题
                GridBand bandID = view.Bands.AddBand("ID");
                bandID.Visible = false; //隐藏ID列
                GridBand bandName = view.Bands.AddBand("姓名");
                GridBand bandSex = view.Bands.AddBand("性别");
                GridBand bandBirth = view.Bands.AddBand("出生日期");
                GridBand bandScore = view.Bands.AddBand("分数");
                GridBand bandMath = bandScore.Children.AddBand("数学");
                GridBand bandChinese = bandScore.Children.AddBand("语文");
                GridBand bandEnglish = bandScore.Children.AddBand("英语");
                GridBand bandSubTotal = bandScore.Children.AddBand("小计");
                GridBand bandRemark = view.Bands.AddBand("备注");

                bandFile.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;//这是合并表头居中显示
                view.EndDataUpdate();//结束数据的编辑
                view.EndUpdate();   //结束视图的编辑
            }

    具体可看 

    dev gridcontrol 合并表头

    23.   //动态添加列
                DevExpress.XtraGrid.Columns.GridColumn Col1 = new DevExpress.XtraGrid.Columns.GridColumn();
                Col1.FieldName = "name";
                Col1.Caption = "名字";
                Col1.Visible = false;
                Col1.VisibleIndex = gvCountry.Columns.Count;
                gvCountry.Columns.Add(Col1);

    24。设置自动增加的行号

      private void gridview_CustomDrawRowIndicator(object sender,                            DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {

    e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
                if (e.Info.IsRowIndicator)
                {
                    if (e.RowHandle >= 0)
                    {
                        e.Info.DisplayText = (e.RowHandle + 1).ToString();
                    }
                    else if (e.RowHandle < 0 && e.RowHandle > -1000)
                    {
                        e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite;
                        e.Info.DisplayText = "G" + e.RowHandle.ToString();
                    }
                }

    25.特效:gridcontrol中有5种view 型式,普通的是gridview,然后分别为cardview、BandedView、Advanced BandedView、LayoutView;共5种。

      1)、view组中把OptionView下的viewmode 设置成“Carousel”就达到这种“旋转木马”式的gridcontrol view 特效了
      2)、layoutView1.OptionsCarouselMode.PitchAngle 这个属性决定“旋转木马”的pitch angle 螺距角; 螺旋角; 螺旋升角; 俯仰角; 倾角; 节锥半角 
      3)、Roll Angle 属性决定着 倾侧角度
      4)、指定数据源,显示数据:
      //显示数据
            private void showData(List<Employee > list)
            {
                DataTable dt = new DataTable("OneEmployee");
                dt.Columns.Add("Caption", System.Type.GetType("System.String"));
                dt.Columns.Add("Department", System.Type.GetType("System.String"));
                dt.Columns.Add("PhotoName", System.Type.GetType("System.Byte[]"));

                for (int i = 0; i < list.Count; i++)
                {
                    DataRow dr = dt.NewRow();
                    dr["Caption"] = list[i].Name;
                    dr["Department"] = list[i].Department;
                    string imagePath = @"D:C#photos" + list[i].PhotoPath;
                    dr["PhotoName"] = getImageByte(imagePath);
                    dt.Rows.Add(dr);
                }
                gridControl1.DataSource = dt;
            }

            //返回图片的字节流byte[]
            private byte[] getImageByte(string imagePath)
            {
                FileStream files = new FileStream(imagePath, FileMode.Open);
                byte[] imgByte = new byte [files.Length ];
                files.Read(imgByte, 0, imgByte.Length);
                files.Close();
                return imgByte;
            }

    26.检查数据的有效性

      在gridview的ValidateRow事件中加入检查代码:
      #region 检查数据
      private void gridView1_ValidateRow(object sender, ValidateRowEventArgs e)
      {
      GridView view = sender as GridView;
      view.ClearColumnErrors();

      if (view.GetRowCellValue(e.RowHandle, "ReceiveDate") == DBNull.Value)
      {
      e.Valid = false;
      view.SetColumnError(view.Columns["ReceiveDate"], "必须指定日期");
      }

      }

    27.设某一列文字和标题局中显示                  
       gridView1.Columns[0].AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
       gridView1.Columns[0].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

    28.列表过滤条件多选

    列名.OptionsFilter.FilterPopupMode= DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList

    29.隔行换色的方法

      this.gridView1.Appearance.OddRow.BackColor = Color.White;  // 设置奇数行颜色 // 默认也是白色 可以省略 
    this.gridView1.OptionsView.EnableAppearanceOddRow = true;   // 使能 // 和和上面绑定 同时使用有效 
    this.gridView1.Appearance.EvenRow.BackColor = Color.WhiteSmoke; // 设置偶数行颜色 
    this.gridView1.OptionsView.EnableAppearanceEvenRow = true;   // 使能 // 和和上面绑定 同时使用有效

    PS:补充项目:

    //不显示内置的导航条。
                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;

    PS:处理主从表显示

    //设置连接字符串
                DbHelperSQL.ConnectionString = DbHelperSQL.CreateConnectionString(@"BUDDHASSQLEXPRESS", "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"];

    //添加分组统计字段
    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;

     

    零零散散的先总结一下吧

    1.TextEditor(barEditItem)取文本

    string editValue = barEditItem1.EditValue.ToString();    //错误,返回null

     

    string editValue = ((DevExpress.XtraEditors.TextEdit)barEditItem).EditValue.ToString();    //正确,返回文本框内容

    2.ComboBoxEdit(barEditItem)添加Item

    string item = "comboboxItem1";

    ((DevExpress.XtraEditors.Repository.RepositoryItemComboBox)this.barEditItem.Edit).Items.Add(item);

    3.ComboBoxEdit(barEditItem)取文本

    string itemValue = this.barEditItem.EditValue.ToString();

    4.Ribbon控件

    //添加Page

    DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage = new RibbonPage();

    ribbonControl.Pages.Add(ribbonPage);

    //添加Group

    DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup = new RibbonPageGroup();

    ribbonPage.Groups.Add(ribbonPageGroup);

    //添加Button

    DevExpress.XtraBars.BarButtonItem barButtonItem = new BarButtonItem();

    ribbonPageGroup.ItemLinks.Add(barButtonItem);

    //添加barSubItem

    DevExpress.XtraBars.BarSubItem barSubItem = new BarSubItem();

    ribbonPageGroup.ItemLinks.Add(barSubItem);

    //barSubItem下添加Button

    barSubItem.AddItem(barButtonItem);

     

     

    //奇怪的删除Page问题

    while (this.ribbonControl.Pages.Count > 0)

    {

         ribbonControl.Pages.Remove(ribbonControl.Pages[0]);    //调试正常,运行报异常

    }

    while (this.ribbonControl.Pages.Count > 0)

    {

         ribbonControl.SelectedPage = ribbonControl.Pages[0];

         ribbonControl.Pages.Remove(ribbonControl.SelectedPage); //运行正常

    }

    //禁止F10键Tips

    ribbonControl.Manager.UseF10KeyForMenu = false;

    //DX按钮

    ApplicationIcon属性改变图标

    右键 Add ApplicationMenu 添加evExpress.XtraBars.Ribbon.ApplicationMenu

    5.HitInfo

    //在Tab页上点击右键的事件响应

    void xtraTabbedMdiManager_Event(object sender, MouseEventArgs e)

    {

         if (e.Button == MouseButtons.Right && ActiveMdiChild != null)

         {

              DevExpress.XtraTab.ViewInfo.BaseTabHitInfo hInfo = xtraTabbedMdiManager.CalcHitInfo(e.Location);

              //右键点击位置:在Page上且不在关闭按钮内

              if (hInfo.IsValid && hInfo.Page != null && !hInfo.InPageCloseButton)

              {

                   this.popupMenu.ShowPopup(Control.MousePosition);//在鼠标位置弹出,而不是e.Location

              }

         }

    }

    //在ribbon上点击右键的事件响应

    private void ribbonControl1_ShowCustomizationMenu(object sender, RibbonCustomizationMenuEventArgs e)

    {

        //禁掉原系统右键菜单

        e.ShowCustomizationMenu = false;

        //右键位置:在barButtonItem上

        if (e.HitInfo != null 

         && e.HitInfo.InItem

         && e.HitInfo.Item.Item is BarButtonItem)

        {

             this.popupMenu.ShowPopup(Control.MousePosition);

        }

        //右键位置:在barSubItem中的barButtonItem上

        else if (e.Link != null 

              && e.Link.Item != null 

              && e.Link.Item is BarButtonItem)

        {

             this.popupMenu.ShowPopup(Control.MousePosition);

        }

    }

    6.皮肤

    //添加皮肤程序集后注册皮肤

    DevExpress.UserSkins.OfficeSkins.Register();

    DevExpress.UserSkins.BonusSkins.Register();

    //设置皮肤

    DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle("Liquid Sky");    //若皮肤名称错误则按系统默认设置(第一个皮肤)

    //GalleryFilterMenuPopup事件设置弹出筛选菜单的“All Groups”为中文

    private void rgbiSkins_GalleryFilterMenuPopup(object sender, GalleryFilterMenuEventArgs e)

    {

        e.FilterMenu.ItemLinks[n].Caption = "所有皮肤";    //n=分组数+1

    }

    //GalleryInitDropDownGallery事件设置弹出皮肤列表的表头“ALL Groups”为中文

    private void rgbiSkins_GalleryInitDropDownGallery(object sender, InplaceGalleryEventArgs e)

    {

        e.PopupGallery.FilterCaption = "所有皮肤";

    }

    7.dockManager

    将视图的状态信息保存到xml文件

    dockManager1.SaveLayoutToXml("..\UserConfig\ViewInfo.xml");

    导出xml中保存的状态信息

    dockManager1.RestoreLayoutFromXml("..\UserConfig\ViewInfo.xml");

    8.barManager

    设置bar的字体与系统字体

    barAndDockingController1.AppearancesBar.ItemsFont = new Font(this.Font.FontFamily, currentFontSize);

    9.设置系统字体

    DevExpress.Utils.AppearanceObject.DefaultFont = new Font(this.Font.FontFamily, currentFontSize);

    10.treeView

    为tree节点加右键菜单并选中该节点

            private void treeList1_MouseDown(object sender, MouseEventArgs e)

            {

                if (e.Button == MouseButtons.Right)

                {

                    DevExpress.XtraTreeList.TreeListHitInfo hi = treeList1.CalcHitInfo(e.Location);

                    if (hi.Node != null && hi.Node.ImageIndex == 5) //叶子节点的ImageIndex == 5

                    {

                        TreeListNode node = treeList1.FindNodeByID(hi.Node.Id);

                        treeList1.FocusedNode = node;

     

                        this.popupMenu1.ShowPopup(MousePosition);

                    }

                }

            }

     ---------------------------------------------------------------------------------------------------------------------------------------------------------

     

    DevExpress使用心得

    Developer Express(以下简称dev) 这个第三方控件是VS2005自带的datagridview控件的重写版本.对于一些grid外观,模板列的设置有非常简单的方法.而且控制起来基本和datagridview一样.所以还是比较方便的.把dev控件拖到窗体以后,会发现多了两个控件gridcontrol1,gridview1,下面针对这期间使用dev的一些总结写在下面(主要是连接数据库,绑定字段和模板列的设置):

    1. 设置数据源:

    string sql = "select fid,fname from dual";

    DataTable dt = DALUse.Query(sql).Tables[0];

    gridControl1.DataSource = dt;

    *:Daluse是项目数据库连接基类,不用特别理会

    2.绑定字段:

    这部分工作主要是在Designer中进行的,dev的Designer设计器提供了非常方便的设置方式.我么可以省去敲代码,直接在设计器中就可以完成了.在左边选Columns,添加完列以后,在列的FieleName属性添加你要绑定列的字段名(ps:比如我的连接SQL语句是:select fid,fname from dual.我想要把fid绑定到列1.那就在列1的FieldName属性写FID就可以了   ),这里有非常重要的一点,对于Oracle数据库,所有的在设计器里写的程序中的字段名必须大写,否则可能绑定不上字段,sqlserver没有这个限制.通过代码其实也可以实现,具体代码如下:

    gridView1.Columns[0].FieldName = "FID";

     

    *:gridcontrol只用在设置数据源,以后的操作大多都有gridview这个控件了.他们是一体的,可以在页面的设计代码中找到将他们关联的一句话,这是系统自动写的:gridcontrol1.mainview=this.gridview1.

     

    2. 模板列的设置:

    模板列可以很轻松的让用户实现在表格中进行查找编辑.

    同样,这部分工作在dev的Designer中进行.在左边选In-Place Editor Repository,上面的ADD提供了比较丰富的模板列类型,从中选取一个就可以了.模板列建好以后就要和我们当前有的数据列进行绑定了.返回到Columns中,假如列1是我们想设定的,在他的属性中找到ColumnEdit.选择我们加进去的模板列就可以了.对于模板列我们最常用的还是LookUpEdit.

    这里简单说下他的设置和用法:

     

    LookUpEdit是弹出的一个小的grid,从它里面我们可以实现自动筛选里面的信息.

    首先从In-Place Editor Repository中添加LookUpEdit.取名为Re1.然后.在他的Columns属性中添加3列.Caption依次为:编号,姓名,性别.FieldName依次为:FID,FNAME,FSEX.然后将Re1的NullText设置成空.

    AutoSearchColumnIndex属性设置为2.ImmediatePopup属性设置为True.

    SearchMode设置为OnlyInPopup.

    然后将这个模板列附加到我们上面提到的列1(也就是将列1的ColumnEdit属性设成Re1)

    最后我们还要在代码里面给Re1绑定数据源和显示项.

     

    Re1.DataSource = DALUse.Query("select fid,fname,fsex from dual").Tables[0];

    Re1.DisplayMember = "FSEX";

    Re1.ValueMember = "FNAME";

    *:对于Oracle数据库字段一定要用大写,切记!!

     

    至此,我们的LookUpEdit模板列就设置完成了,它现在已经实现了通过性别列检索,然后将姓名列附到我们的列1上.

    对于LookUpEdit可以实现过滤主要是AutoSearchColumnIndex和SearchMode属性.可以参见帮助知道它们的用法: ms-help://DevExpress.NETv7.2/DevExpress.XtraEditors/DevExpressXtraEditorsControlsSearchModeEnumtopic.htm

     

     

    Ps:

    //去掉上面的筛选条

    gridView1.OptionsView.ShowGroupPanel = false;

     

    //设某一列只读或者不可编辑

    gridView1.Columns[0].OptionsColumn.AllowEdit = false;

    gridView1.Columns[0].OptionsColumn.ReadOnly = false;

     

    //设某一列文字和标题局中显示                  gridView1.Columns[0].AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

                       gridView1.Columns[0].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

     

    //去掉某一列上面的自动筛选功能(Filter)                   gridView1.Columns[0].OptionsFilter.AllowAutoFilter = false;

    gridView1.Columns[0].OptionsFilter.AllowFilter = false;                gridView1.Columns[0].OptionsFilter.ImmediateUpdateAutoFilter = false;

     

    //设置冻结列(左冻结)

    gridView1.Columns[0].Fixed= DevExpress.XtraGrid.Columns.FixedStyle.Left;

     

    //得到单元格数据(0行0列)

    string ss=gridView1.GetRowCellDisplayText(0, gridView1.Columns[0]);

    string ss = gridView1.GetRowCellValue(0, gridView1.Columns[0]);

     

    //设置单元格数据(将0行0列的单元格赋值123)

    gridView1.SetRowCellValue(0, gridView1.Columns[0], "123");

     

    //手动添加dev的列

    DevExpress.XtraGrid.Columns.GridColumn Col1=new DevExpress.XtraGrid.Columns.GridColumn ();

    Col1.FieldName="FID";

    Col1.Visible=true;

    Col1.VisibleIndex=gridView1.Columns.Count;

    gridView1.Columns.Add(Col1);

    //设置自动增加的行号,需要先添加给gridview添加事件CustomDrawRowIndicator

            private void gridview_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)

            {

                if (e.Info.IsRowIndicator && e.RowHandle >= 0)

                    e.Info.DisplayText = (e.RowHandle + 1).ToString();

            }

     

     

    //添加datatable数据行,数据列

                        DataTable dt = new DataTable();

                        dt.Columns.Add("Col1");

                        DataRow dr = dt.NewRow();

                        dr[0] = "123";

                        dt.Rows.Add(dr);

     

    *以上这些都可以在Designer中进行设置,而不用去敲代码

                                               

     

    对于第三方控件的整体修改和保存,具体说明如下:

    1.     删除: (修改了dgvdel里的datagridviewdel方法)

    public static void datagridviewdel_Dev(DevExpress.XtraGrid.Views.Grid.GridView Mydgv)

            {

                if (MessageBox.Show("你确定要删除选中的记录吗?", "删除提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, 0, false) == DialogResult.Yes)

                {

                    int iSelectRowCount = Mydgv.SelectedRowsCount;

                  

                    if (iSelectRowCount > 0)

                    {

                        Mydgv.DeleteSelectedRows();

                  

                    }

      

                }

            }

     

    2. 新增: (对于新增,其本身的AddNewRow方法就可以做到)

     

    private void btn_add_Click(object sender, EventArgs e)

            {

    gridView1.AddNewRow();   

    }

    具体如果对于新加行还有什么特别的设置,可以在它gridView1_InitNewRow事件中填写:

    private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)

            {

                ColumnView View = sender as ColumnView;

                View.SetRowCellValue(e.RowHandle, View.Columns[0], gridView1.GetRowCellValue(gridView1.GetRowHandle(gridView1.RowCount - 2), gridView1.Columns[0])); //复制最后一行的数据到新行

                View.SetRowCellValue(e.RowHandle, View.Columns[1], gridView1.GetRowCellValue(gridView1.GetRowHandle(gridView1.RowCount - 2), gridView1.Columns[1])); //复制最后一行的数据到新行

            }

     

    3.     保存 (第三方控件提供的RefreshData和RefreshDataSource方法对于保存数据都不好使,最后还是使用了Dgvsave的datagridviewsave方法,用这个方法就可以)

     

     

     

    注:代码中出现多gridView1全为第三方控件的gridView.

     

    示例:

    去掉上面的”Drag a column header here to group by that column”

    我们拖动一个gridcontrol控件后,在出现上会出现一下效果:

     

    他默认的好多地方都是用英文表示出来的,所以我们得用一些相关的属性设置来达到我们实际想要达到的效果.首先就是要去掉上面的一个英文条”Drag a column header here to group by that column”.我们可以通过手工设置和代码编写来实现,以后针对第三方控件的属性都可以用这两种方法来实现.手工设置:点击左下角的”Run Designer”按钮.


    这样我们就进入了Dev的设计器(所有的对于控件的控制都可以在这里设置).然后点击左边的Main选项卡中的Views项.有边栏目里会出现N多属性,我们找到OptionViews,展开它,然后将里面的ShowGroupPanel属性设成false就OK了.代码编写:

    我们可以直接在构造函数或者页面的打开事件中写入代码:

    gridView1.OptionsView.ShowGroupPanel = false;

    两种方法可以达到同样的效果.

    设置外观

    接下来我们来设置它的外观.Dev给我们提供了很多外观的模板,这样使得我们不用在通过复杂的代码来设置他的外观,我们直接用手工设置就可以完成了!点击Dev设计器中左边的Appearance选项卡的Style Schemes项:


    通过在里面设置外观,然后点击右小角的Apply按钮就可以很轻松的设置各种各样的外观了.

    去掉控件默认的Filter功能出现英文的情况

    我们按照上面所讲的方法给Dev添加列后,在点击列头的小按钮的时候会出现这样的效果(出现了我们不想看到的英文):


    这个对于我们来说是比较讨厌的.我们可以在Dev的设计器中消灭它.点击设计器中左边的Main选项卡的Columns项.选择你想设置的列,然后点击右上角他们的选项卡:


    选择Filter options选项卡,然后将里面的AllowAutoFilter,AllowFilter,ImmediateUpdateAutoFilter属性分别设成false就可以了.这样这列的AutoFilter功能就去掉了(仅限于这列)!如果你够细心的话,你会发现上面的选项卡Column options里面的属性也都是特别使用的:


    这里面的属性不用说,我想你也知道怎么用了(他也是只针对一列设置的).

    关闭右键点击列头会出现英文的情况:

    在Dev的设计器中选择左边Main选项卡中的Views项.找到OptionsMenu,然后展开,将里面的EnableColumnMenu设成false就可以了.

    =======================================================================================================

     

    DevExpress控件的GridControl控件小结


    (由于开始使用DevExpress控件了,所以要点滴的记录一下)

     

    1.DevExpress控件组中的GridControl控件不能使横向滚动条有效。现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容。

    解决:

    gridView1.OptionsView.ColumnAutoWidth属性是true,即各列的宽度自动调整,你把它设成false,就会出现了。

     

    2.使单元格不可编辑。

    gridcontrol -->gridview -->OptionsBehavior -->Editable=false

     

    3.没有下拉滚动条事件怎么办?现象:因为需要加载大数据量数据,所以不能一次把所有数据读入datatable进行绑定,所以决定在用户进一步浏览数据时进行数据的实时加载工作,就是每当用户拉动滚动条时,多加载一些数据进入datatable.没有找到合适的滚动条事件,于是用这个事件代替了,非常合适我的需求.

    TopRowChanged事件.

    4.获取选定行,指定列单元格的内容

            private string GetSelectOID()
            {
                int[] pRows = this.gridView1.GetSelectedRows();
                if (pRows.GetLength(0) > 0)
                    return gridView1.GetRowCellValue(pRows[0], mOIDFiledName).ToString ();
                else
                    return null;
            }

    //mOIDFiledName为要获取列的列名

    5.去除"Drag a Column Header Here To Group by that Column"

    属性Gridview->Option View->Show Group Panel=false,就好了

    6.在gridcontrol中添加checkbox复选框

    gridview->run designer->columns->选择要变成复选框的那一列->column edit->new(在这里可以选择很多类型)

    加载checkbox数据时,费了一点时间,checkbox的复选框怎么点击,一失去焦点是,选择的操作就无效了,问题就出在datatable的绑定上了,一定要绑定一个布尔的类型.

    代码是这样滴!

    private void FrmCreateLegend_Load(object sender, EventArgs e)
    {
        IFeatureLayer pFeatureLayer;
        IDataset pDataset;
        string pName;
        DataTable pDatatable = new DataTable();
        pDatatable.Columns.Add("图层名称", System.Type.GetType("System.String"));
        pDatatable.Columns.Add("选择", System.Type.GetType("System.Boolean"));
        DataRow pDataRow;
        object[] rowArray = new object[2];
        for (int i = 0; i < mFeatureLayers.Count; i++)
        {
            pDataRow = pDatatable.NewRow();
            pFeatureLayer = mFeatureLayers[i] as IFeatureLayer;
            rowArray[0] = pFeatureLayer.Name;
            rowArray[1] = false;
            pDataRow.ItemArray = rowArray;
            pDatatable.Rows.Add(pDataRow);
        }

        this.gridMark.DataSource = pDatatable;
        this.gridMark.Refresh();
    }
    注意:创建的datatable的列名一定要和gridview中的列的fieldname属性值是一个名字,不然,你会发现添加了和你绑定的datatalbe一样多的行,可是行里面却没有内容的.

    7.多选

    GridControl->GridView->属性->OptinosSelecttion->MultiSelect

     8.不显示子表信息

    当我们对DataTable建立父子关系后,将父表绑定在Grid上,会造成关系列上有加号显示,并且可以展开.如果你觉得展开的信息对你没有意义的话,是可以关掉的.这是需要修改属性

    属性Gridview->Option View->ShowDetailButtons=false

                                      

     

  • 相关阅读:
    oracle安装常见问题
    VM EXSI安装使用
    虚拟机---无法获取所有权
    Http常用状态码
    翻译:CommonJS的wiki
    如何在ie6/ie7/ie8中实现iframe背景透明
    网页版俄罗斯方块
    HTML5之pushstate、popstate操作history,无刷新改变当前url
    我们是如何做好前端工程化和静态资源管理
    dns-prefetch—DNS预解析技术
  • 原文地址:https://www.cnblogs.com/kliine/p/9246703.html
Copyright © 2011-2022 走看看