2

Ich habe ein mvc devexpress grid, ich möchte eine Funktionalität erreichen, die bei der Bearbeitung des Gitters, eine der Spalte gelesen werden muss, während andere veränderbar sind. Und während Nach dem Hinzufügen einer neuen Zeile müssen alle Spalten veränderbar sein, einschließlich der zuvor genannten Nur-Lese-Spalte.Verwenden Sie settings.CellEditorInitialize für eine bestimmte Spalte anstelle des gesamten Gitters

Dies ist mein Code für das Gitter

@{ 

    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() 

Und das ist, was ich versucht

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

dies setzt die alle Rasterspalten in nur lesen, während ich nur die fromDate Spalte zu müssen be readonly

Jede Hilfe wäre willkommen. Vielen Dank.

Antwort

2

Stattdessen können Sie CellEditorInitialize Ereignis auf Ihrer gewünschten Spalte verwenden

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

Ich denke immer noch, Sie sollten die Aktion MVCxGridViewColumn.SetEditItemTemplateContent für diese spezifische Spalte einrichten.

Dies ist sehr ähnliches Problem auf Ihre Vorschauen ein:

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

Bitte versuchen Sie folgende Lösung, sollte es funktioniert:

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() 
      ); 
     }); 
    });