2016-08-08 46 views
0

ich ein DevExpress Gitter in meiner Teilansicht habe,Readonly-Eigenschaft auf eine Säule von DevExpress Grid (MVC) Nur auf bearbeiten klicken

Jede Zeile des Gitters hat ein Hinzufügen, Aktualisieren und Löschen-Taste.

Wenn auf Update der bestimmten Zeile geklickt wird, erscheint ein Formular, das alle Spalten des Rasters enthält.

Jetzt möchte ich die Nur-Lese-Eigenschaft von einer der Spalten auf true setzen, die ich von column.ReadOnly = true; tat

Aber was das bedeutet ist, setzt die Spalte immer auf Nur-Lesen heißt auch während auf Neu.

Wo ich diese readonly Eigenschaft nur während der Bearbeitung möchte, klicken Sie auf.

hier ist mein DevExpress Grid Code

@{ 

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

Dies ist, wie mein Raster auf Anfangslast aussieht. enter image description here

und wenn auf Update geklickt für die Bearbeitung enter image description here

Antwort

0

Wenn ich dich gut verstehen, ich glaube, Sie bearbeiten Vorlage verwenden müssen Problem lösen Sie beschreiben.

Innerhalb bearbeiten Vorlage Aktion können Sie überprüfen, ob neue Zeile in den Bearbeitungs ist von Eigenschaftswert Überprüfung ASPxGridView.IsNewRowEditing

Bitte Beispiel unten sehen.

settings.Columns.Add(col => 
    { 
     col.FieldName = "Id"; 
     col.Caption = "Id"; 

     col.SetEditItemTemplateContent(e => 
     { 
      if (e.Grid.IsNewRowEditing) 
      { 
       // your code here 
      } 
      else 
      { 
       // your code here 
      } 
     }); 
    }); 

Überprüfen Sie bitte folgenden Links, um weitere Informationen

MVCxGridViewColumn.SetEditItemTemplateContent https://documentation.devexpress.com/#AspNet/DevExpressWebMvcMVCxGridViewColumn_SetEditItemTemplateContenttopic(68Z8MA)

ASPxGridView.IsNewRowEditing https://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridView_IsNewRowEditingtopic

+0

Ich habe versucht, dass, nur dass die gesamte Datecontrol zu finden der Spalte disaap Ohren, anstatt es nur lesbar zu machen @peters –

+0

Es verschwand, weil dies nur ein Beispiel ist. Sie müssen eine spezifische Devexpress MVC-Steuerdefinition innerhalb der if-Anweisung hinzufügen. Das wird HTML-Steuerelementausgabe in ViewContext.Writer schreiben. Etwas wie folgt aus: 'Code ViewContext.Writer.Write ( Html.DevExpress() DateEdit (settingsDateEdit => { settingsDateEdit.Name = "VonDatum"; settingsDateEdit.Width = Unit.Percentage (100). ; settingsDateEdit.ReadOnly =! E.Grid.IsNewRowEditing; }). Bind (fromDate) .GetHtml() ); ' – PeterS

+0

Bitte versuchen Sie dies und lassen Sie mich wissen, ob es für Sie funktioniert. Wenn etwas nicht klar ist, lass es mich auch wissen :) – PeterS