操作系统

当前位置:金沙棋牌 > 操作系统 > 一个正确使用DevExpress

一个正确使用DevExpress

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-11-21 10:21

意思就是说模板控件必须命名为“PART_Editor”,并且模板不需要绑定数据源,对应的GridControl的列绑定数据源即可,GridControl会自动将模板嵌入展示。我刚开始就是没有命名规范,并且在模板控件中绑定了数据源所以显示一直有问题。根据需求写出模板如下。

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

思路

    OptionsColumn.AllowEdit = True

然后前台xmal的CellTemplateSelector中引用选择器,代码如下

  只读不可拷贝:

需求

13.手动添加dev的列:

 源码下载:

添加一列,FieldName为 "check",将ColumnEdit 设置为 复选框 样式。gridview1editable设置为true

到此,项目运行起来看着还行,虽然需求很简单,但也折腾了我一段时间,今后我会不断的写博客来记录我遇到的坑来和大家分享,同时也方便我自己查看。最后,我将完整的demo上传供大家参考,我用的dev的版本是15.2.4,如果你的版本和我的不一样,可以将demo中的引用删除换成自己的就可以了。

 8:gridview 获 取某行的值 都是get开头的命令,  行内哪行被选了光标聚焦,浅蓝色被选,就用比如

金沙棋牌 1

  只读可拷贝:

到此,问题就解决了。

 设置为多选

需求很简单,选择方式下拉框选中时间控制方式或者价格控制方式,后面的控制点单元格对应显示日期控件或文本控件。

2:去掉Drag a column header here to group..... 

前台显示如下

    ColumnViewOptionsBehavior.Editable = True

补充:当系统时间设置如下时,前台界面将显示混乱。

1: 拖进去的时候别拖到tabcontrol外边, 否则dock 停靠的时候,停靠错了地方. 

补充2:对于上面的切换控制方式时,后面一列清空的需求这里有更简单的实现方式,只需要将你自定义的类中的属性加上一些逻辑控制就好了,代码如下:

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

在此,我给出第二种方法的实现方式。

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

   private int _ControlMode;

        public int ControlMode
        {
            get { return _ControlMode; }
            set { _ControlMode = value;
                ControlPoint = null;
            }
        }

         value == "true" ||  "" ("false")

基本的需求就完成了,是不是看着很简单。其实当你觉得简单是因为你了解了DEV的一些机制,比如模板控件的命名必须是“PART_Editor”,还有绑定的地方,任何一个地方出错了前台运行显示都是不会称心如意的,这个时候你就会找不到解决的办法,从而达不到你想要的目的。上面的需求其实还有一个问题,比如:当你添加一条记录是金额控制的,此时这条记录已经添加到数据中了。如果你在界面上修改将下拉框选中改为时间控制,后面一列由于因为无法转换为时间格式,所以显示仍然有问题。此时怎么办呢,我想到了GridControl的CellValueChanged事件,当我切换控制方式时,后面一列我给它清空,这样直接让用户输入不就好了。在这里我也将代码贴出来。

  到Columns中,在他的属性中找到ColumnEdit.

说明

6.设置数据源:

   private void ViewSimulate_CellValueChanged(object sender, CellValueChangedEventArgs e)
        {
            if (e.Column == ComControlMode)
            {
                ((GridControl) e.Source.DataControl).SetCellValue(e.RowHandle,ControlPointDataTime,null);
            }
        }

4:显示tabpage页头

The cause of the issue is that date values are stored as string values. In this scenario, DXGrid posts the values in the current culture to maintain end-user input. 
DateEdit editors, however, use an invariant culture to parse string values.
To resolve this issue, you can either store the date values as DateTime or additionally convert posted values. With your current implementation,
the second approach can be implemented by setting Binding.Converter to a custom converter

   gridView1.Columns[金沙棋牌,0].AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

刚拿到这个需求,就想到了模板选择器。但是之前也没有用过模板转换器,所以走了很多弯路。我们先看dev官方文档的说明

  gridView1.OptionsView.ShowGroupPanel=false; 

      <dxg:GridColumn x:Name="ControlPointDataTime" Binding="{Binding Path=ControlPoint,Mode=TwoWay}" Header="控制点" >
                    <dxg:GridColumn.CellTemplateSelector>
                        <local:SettingDataTemplateSelector
                                                             FirstTemplate="{StaticResource FirstTemplate}"
                                                             SecondTemplate="{StaticResource SecondTemplate}" />
                    </dxg:GridColumn.CellTemplateSelector>

                </dxg:GridColumn>

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

同时CellTemplateSelector需要继承DataTemplateSelector类,并且实现SelectTemplate方法根据条件返回一个你所需的Template.代码如下

 

When using CellTemplate (or DataViewBase.CellTemplate) note the following:

To enable data editing, use an editor shipped with the DevExpress Data Editors Library for WPF. The editor's Name must be set to 'PART_Editor'.

When the editor's Name is set to PART_Editor, the grid automatically adjusts its appearance and synchronizes the editor with a source field specified by the FieldName or Binding properties.

Standard controls can be used in CellTemplate only for display purposes. Data editing is not allowed.

Templates specified via the DisplayTemplate and/or EditTemplate are ignored.

A column's in-place editor specified via EditSettings, is also ignored.

 7: 不显示列头:

 将修改后的源码重新上传。

   gridControl1.DataSource = dt;

public class ConvertDateTime : MarkupExtension, IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            DateTime date;
            if (value is string && DateTime.TryParse((string)value, out date))
                return date.ToString(CultureInfo.InvariantCulture);
            return value;
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }

附其他博客资料

 public  class SettingDataTemplateSelector: DataTemplateSelector
    {
        public DataTemplate FirstTemplate
        {
            get;
            set;
        }
        public DataTemplate SecondTemplate
        {
            get;
            set;
        }


        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            FrameworkElement element = container as FrameworkElement;

            EditGridCellData data = (EditGridCellData)item;
            Setting setting = data.RowData.Row as Setting;
            if (setting != null)
            {

                if (setting.ControlMode == 1)
                    return element.FindResource("FirstTemplate") as DataTemplate;
                else
                    return element.FindResource("SecondTemplate") as DataTemplate;
            }
            return base.SelectTemplate(item, container);
        }
    }

    OptionsColumn.ReadOnly = False  

当我发现这个问题,我一时没有更好的解决办法。前台模板DateEdit的Mask、DisplayFormatString以及MaskUseAsDisplayFormat都设为True。于是我向DevSupport寻求帮助。DevSupport给出解释如下:

2.得到当前选定记录某字段的值:

我在项目中根据需求需要用到WPF Dev CellTemplateSelector时,遇到不少坑。曾一度想要放弃使用模板转换器,但又心有不甘,终于在不断努力下,达到了需求的要求。所以写下来和大家分享。如果有同样困惑的人,可以少走些弯路。笔者第一次写博客,文笔不好,还请见谅。

         Re1.DisplayMember = "FSEX";

金沙棋牌 2

   gridView1.Columns[0].OptionsFilter.AllowAutoFilter = false;

 

金沙棋牌 3

金沙棋牌 4

    ColumnViewOptionsBehavior.Editable = False  

前台添加Convert转化绑定

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

<dxg:GridColumn x:Name="ControlPointDataTime" Binding="{Binding Path=ControlPoint,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,NotifyOnSourceUpdated=True,Converter={local:ConvertDateTime}}" Header="控制点" >

 6: 显示行号

  <Window.Resources>
        <DataTemplate x:Key="FirstTemplate">
            <StackPanel>
                <dxe:DateEdit x:Name="PART_Editor"  Mask="yyyy-MM-dd" MaskUseAsDisplayFormat="True">
                </dxe:DateEdit>
            </StackPanel>
        </DataTemplate>

        <DataTemplate x:Key="SecondTemplate">
            <StackPanel>
                <dxe:TextEdit x:Name="PART_Editor"
                              MaskType="Numeric" Mask="n" MaskUseAsDisplayFormat="True" AllowNullInput="False" >
                </dxe:TextEdit>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>

    ColumnViewOptionsBehavior.Editable = True

金沙棋牌 5

11.设置冻结列(左冻结):

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

11绑定数据源

    OptionsColumn.AllowEdit = True

  将要绑定的DataTable添加列 "check",Type 为 bool。

 

Gridcontrol设置

  Col1.FieldName="FID";

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

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

 10:清空gridview 内容   因为更新是根据数据源更新的,所以清空数据源,就吧gridview内的内容清空了.

   对于Oracle数据库,所有的在设计器里写的程序中的字段名必须大写,否则可能绑定不上字段,sqlserver没有这个限制.  

  Col1.Visible=true;

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

5:显示tabcontrol 不显示tab页头

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

  sValue=Table.Rows[gridView1.FocusedRowHandle][FieldName].ToString();  

金沙棋牌 6

  获取: string value = gridview.GetDataRow(i)["check"].toString();

  以LookUpEdit为例:

5.修改最上面的GroupPanel内容:

  // xtraTabControl1.ShowTabHeader=DevExpress.Utils.DefaultBoolean.False;
 xtraTabControl1.Visible = false;

   绑定每一列的FiledName--属性

3.数据只读:

9.设某一列文字和标题局中显示:

  SearchMode设置为OnlyInPopup.

  可编辑:

ShowGroupPanel = False

3:tabcontrol 中不能要保留一个tabpage ,否则gridcontrol 拖进去 无控件可以承载,导致丢失.那样就无法在girdcontrol 控件里边可视化操作了.

   gridView1.OptionsSelection.MultiSelect = true;

         Re1.ValueMember = "FNAME";  

1.隐藏最上面的GroupPanel:

 tabcontrol 设置:

  static  BindingList<T> bl = new BindingList<T>();

  var a = gridView1.GetFocusedRow();  这个是获取整个行的 内的数据.

金沙棋牌 7

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

10.去掉某一列上面的自动筛选功能(Filter):                  

9: gridview 添加checkbox 选择

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

  Col1.VisibleIndex=gridView1.Columns.Count;

  gridView1.Columns.Add(Col1);  

 

    OptionsColumn.ReadOnly = True  

金沙棋牌 8显示关闭图标

  gridView1.OptionsDetail.EnableMasterViewMode=false;  

7.读写拷贝权限设置:

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

12.得到单元格数据(0行0列):

   gridView1.GroupPanelText="柳生飘絮";  

金沙棋牌 9

  绑定DataTable到GridControl。

4.不显示MasterDetailView:

  this.gridView1.IndicatorWidth = 80;  //调整行号的框宽
  private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            if (e.Info.IsRowIndicator && e.RowHandle >= 0)
            {
                e.Info.DisplayText = (e.RowHandle + 1).ToString();
            }
        }
添加customdrawrowindicator 事件

   gridView1.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect;

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

  gridView1.OptionsBehavior.Editable=false;  

8.模板列的设置:

本文由金沙棋牌发布于操作系统,转载请注明出处:一个正确使用DevExpress

关键词: