2

I have a mvc devexpress grid, i want to acheive a functionality which when on editing of the grid, one of the column has to be readonly while other changeable.And while adding a new row, all the columsn have to be changeable including the previously said readonly column.

This is my code for the grid

@{

    var grid = Html.DevExpress().GridView(settings =>
    {
        settings.Name = "GridViewDuration";
        settings.CallbackRouteValues = new { Controller = "DurationMaster", Action = "GridViewDurationPartial" };

        settings.SettingsEditing.AddNewRowRouteValues = new { Controller = "MyController", Action = "MyControllerAction1" };
        settings.SettingsEditing.UpdateRowRouteValues = new { Controller = "MyController", Action = "MyControllerAction2" };
        settings.SettingsEditing.DeleteRowRouteValues = new { Controller = "MyController", Action = "MyControllerAction3" };
        settings.SettingsEditing.Mode = GridViewEditingMode.EditFormAndDisplayRow;
        settings.SettingsBehavior.ConfirmDelete = true;

        settings.CommandColumn.Visible = true;
        settings.CommandColumn.ShowNewButton = true;
        settings.CommandColumn.ShowDeleteButton = true;
        settings.CommandColumn.ShowEditButton = true;

        settings.KeyFieldName = "DurationId";

        settings.SettingsPager.Visible = true;
        settings.SettingsPager.PageSize = 20;
        settings.Settings.ShowGroupPanel = true;
        settings.Settings.ShowFilterRow = true;
        settings.SettingsBehavior.AllowSelectByRowClick = false;
        settings.Columns.Add(column =>
        {
            column.FieldName = "Column1";
            column.ReadOnly = true;
            column.Width = 20;

        });
        settings.Columns.Add(column =>
        {
            column.FieldName = "Column2";
            column.Caption = "xyz";
            column.ColumnType = MVCxGridViewColumnType.ComboBox;
            column.Width = 250;

            var comboBoxProperties = column.PropertiesEdit as ComboBoxProperties;
            comboBoxProperties.DataSource = PMC.Web.Controllers.DurationMasterController.getSelectList("0", "MyAction4");
            comboBoxProperties.TextField = "Text";
            comboBoxProperties.ValueField = "Value";
            comboBoxProperties.ValueType = typeof(int);
            comboBoxProperties.ValidationSettings.RequiredField.IsRequired = true;


        });
        settings.InitNewRow = (sender, e) =>
        {
            e.NewValues["ColumnId"] = 0;
        };
        settings.Columns.Add("ColumnName");
        settings.Columns.Add("Description");
        //settings.Columns.Add("DisplayName");
        settings.Columns.Add(column =>
    {
        column.Caption = "FromDate";
        column.FieldName = "FromDate";
        column.ColumnType = MVCxGridViewColumnType.DateEdit;
        column.ReadOnly = true;
        var DateEditProperties = column.PropertiesEdit as DateEditProperties;
        column.CellStyle.Wrap = DefaultBoolean.False;
    });



    settings.Columns.Add(column =>
    {
        column.Caption = "ToDate";
        column.FieldName = "ToDate";

        column.ColumnType = MVCxGridViewColumnType.DateEdit;
        var DateEditProperties = column.PropertiesEdit as DateEditProperties;
        column.CellStyle.Wrap = DefaultBoolean.False;
    });
    });
    if (ViewData["EditError"] != null)
    {
        grid.SetEditErrorText((string)ViewData["EditError"]);
    }

}
@grid.Bind(Model).GetHtml()  

And this is what i tried

settings.CellEditorInitialize += (s, e) =>
        {
            var abc = s as ASPxGridView;
            e.Editor.ReadOnly = !abc.IsNewRowEditing;
        };

this sets the all the grid columns in read only, while i only need the fromDate column to be readonly

Any help would be appreciated. Thanks.

WorksOnMyLocal
  • 1,617
  • 3
  • 23
  • 44

2 Answers2

2

Instead you can use CellEditorInitialize event on your desired column

settings.CellEditorInitialize += (s, e) =>
{
    var abc = s as ASPxGridView;
    if (e.Column.FieldName == "YourFieldName")
        e.Editor.ReadOnly = !abc.IsNewRowEditing;
};
0

I still think you should setup action MVCxGridViewColumn.SetEditItemTemplateContent on that specific column.

This is very similar issue to your previews one:

Set ReadOnly property to a column of devexpress grid(MVC) only on edit click

Please try following solution, it should works :

    settings.Columns.Add(col =>
    {
        col.FieldName = "FromDate";
        col.Caption = "From Date";
        col.Width = Unit.Percentage(15);
        col.ColumnType = MVCxGridViewColumnType.DateEdit;

        col.SetEditItemTemplateContent(e =>
        {
            var fromDate = DateTime.Now;

            ViewContext.Writer.Write(
                Html.DevExpress().DateEdit(settingsDateEdit =>
                {
                    settingsDateEdit.Name = "fromDate";
                    settingsDateEdit.Width = Unit.Percentage(100);

                    settingsDateEdit.ReadOnly = !e.Grid.IsNewRowEditing;

                }).Bind(fromDate).GetHtml()
            );
        });
    });
Community
  • 1
  • 1
PeterS
  • 78
  • 6