0

I'm using MvcxGridView to bind a DataTable model and I have a problem with a DataColumn with datatype System.Byte[].

  1. When I view data, gridview does not show a value and only displays System.Byte[]. I want the GridView to display a picture in that column.

  2. When I save data, I get this message:

    Invalid cast from 'System.String' to 'System.Byte[]'

How can I solve these problems?

Here is my code in view:

@using System.Data;
@model TestPA6MVC.Models.EntityModelForViewDataSettingGrid

@functions{
    MVCxGridViewCommandColumn CreateCommandColumn(string AllowEdit,string AllowAdd)
    {
        MVCxGridViewCommandColumn column = new MVCxGridViewCommandColumn();
        column.Visible = true;
        column.NewButton.Visible = (AllowAdd.ToLower()=="true")?true:false;
        column.DeleteButton.Visible = (AllowEdit.ToLower() == "true") ? true : false; ;
        //column.EditButton.Visible = true;
        return column;
    }
}


@{
var grid = Html.DevExpress().GridView(
    settings => {
        settings.Name = "gvEditing";
        settings.CallbackRouteValues = new {
            Controller = "Home", Action = "GridViewPartial",
            ViewName = Model.ViewName,
            PrimaryKeyCollection = Model.PrimaryKeyCollection,
            TableEditorList = Model.TableEditorList,
            ColumnComboBoxCollection = Model.ColumnComboBoxCollection,
            ColumnReadOnlyCollection = Model.ColumnReadOnlyCollection,
            ColumnHideCollection = Model.ColumnHideCollection,
            ParamNameCollection = Model.ParamNameCollection,
            DataForParamCollection = Model.DataForParamCollection,
            ParamTypeCollection = Model.ParamTypeCollection,
            AllowAdd = Model.AllowAdd,
            AllowEdit = Model.AllowEdit
        };
        settings.SettingsEditing.AddNewRowRouteValues = new { Controller = "Home", Action = "GridViewPartialAddNew", ViewName = Model.ViewName };
        settings.SettingsEditing.UpdateRowRouteValues = new { Controller = "Home", Action = "GridViewPartialUpdate", ViewName = Model.ViewName };
        settings.SettingsEditing.DeleteRowRouteValues = new { Controller = "Home", Action = "GridViewPartialDelete", ViewName = Model.ViewName };
        settings.SettingsEditing.BatchUpdateRouteValues = new {
            Controller = "Home", Action = "BatchEditingUpdateModel",
            ViewName = Model.ViewName,
            PrimaryKeyCollection = Model.PrimaryKeyCollection,
            TableEditorList = Model.TableEditorList,
            ColumnComboBoxCollection = Model.ColumnComboBoxCollection,
            ColumnReadOnlyCollection = Model.ColumnReadOnlyCollection,
            ColumnHideCollection = Model.ColumnHideCollection,
            ParamNameCollection = Model.ParamNameCollection,
            DataForParamCollection = Model.DataForParamCollection,
            ParamTypeCollection = Model.ParamTypeCollection,
            AllowAdd = Model.AllowAdd,
            AllowEdit = Model.AllowEdit
        };
        if (Model.AllowEdit.ToLower() == "true")
        {
            settings.SettingsEditing.Mode = GridViewEditingMode.Batch;//Kieu view chinh sua
        }
        else { settings.SettingsEditing.Mode = GridViewEditingMode.PopupEditForm; }
        settings.SettingsBehavior.ConfirmDelete = true;//Cho phep hien thi thong bao xac nhan
        settings.SettingsBehavior.ColumnResizeMode = ColumnResizeMode.Control;//Cho phep chinh sua do rong cot
        settings.Width = 800;//Chieu rong cua gridview
        settings.Settings.HorizontalScrollBarMode = ScrollBarMode.Auto;
        settings.SettingsPager.Mode = GridViewPagerMode.ShowPager;
        settings.SettingsPager.PageSize = 50;
        settings.Settings.VerticalScrollableHeight = 300;
        settings.Settings.VerticalScrollBarMode = ScrollBarMode.Auto;
       
        settings.SettingsPager.Visible = true;
        settings.Settings.ShowGroupPanel = true;
        settings.Settings.ShowFilterRow = true;
        settings.Settings.ShowHeaderFilterButton = true;//Hien thi bo loc cho column

        //Tao cot gia de tranh tinh trang hien thi lai cac Column an khi Callback
        MVCxGridViewColumn fakeco = new MVCxGridViewColumn();
        fakeco.Visible = false;
        fakeco.Width = 0;
        fakeco.EditFormSettings.Visible = DefaultBoolean.False;
        settings.Columns.Add(fakeco);
       
        settings.SettingsBehavior.AllowSelectByRowClick = true;
        settings.DataBound = (sender, e) =>
        {

            //Build Column Tool  Automatic
            ((MVCxGridView)sender).Columns.Insert(0, CreateCommandColumn(Model.AllowEdit,Model.AllowAdd));
            //Add custom Column
            foreach (var child in Model.ModelForDisplayColumnList)
            {
                MVCxGridViewColumn dc = new MVCxGridViewColumn();
                dc.Caption = child.Caption;
                dc.FieldName = child.ColumnName;
                if(child.IsHidden)//Neu de an hoan toan se khong lay duoc du lieu da chinh sua
                { dc.Width = 0; }
                //dc.Visible = !child.IsHidden;
                dc.ReadOnly = child.IsReadOnly;
                switch (child.DataType)
                {
                    case "datetime":
                        dc.ColumnType = MVCxGridViewColumnType.DateEdit;
                        var DateEditProperties = dc.PropertiesEdit as DateEditProperties;
                        DateEditProperties.DisplayFormatString = "dd/MM/yyyy hh:mm tt";
                        //Cho phep chinh ngay, gio
                        DateEditProperties.UseMaskBehavior = true;
                        //Dinh dang hien thi khi chinh sua
                        DateEditProperties.EditFormat = EditFormat.Custom;
                        DateEditProperties.EditFormatString = "dd/MM/yyyy hh:mm tt";
                        DateEditProperties.TimeSectionProperties.Visible = true;//Hien khung chinh gio
                        break;
                    case "combobox":
                        dc.ColumnType = MVCxGridViewColumnType.ComboBox;
                        var DropDownEditProperties = dc.PropertiesEdit as ComboBoxProperties;
                        DropDownEditProperties.DataSource = child.DataSourceForComboBoxColumn;
                        DropDownEditProperties.ValueField = child.DataSourceForComboBoxColumn.Columns[0].ColumnName;
                        DropDownEditProperties.TextFormatString = "{0}";
                        foreach (DataColumn childcolumn in child.DataSourceForComboBoxColumn.Columns)
                        {
                            DropDownEditProperties.Columns.Add(childcolumn.ColumnName, childcolumn.ColumnName);
                        }
                        break;
                    case "boolean":
                    case "bit":
                        dc.ColumnType = MVCxGridViewColumnType.CheckBox;
                        break;
                    case "byte[]":
                        dc.ColumnType = MVCxGridViewColumnType.BinaryImage;
                        //var ImageEditProperties = dc.PropertiesEdit as BinaryImageEditProperties;
                        //ImageEditProperties.ImageWidth = 50;
                        //ImageEditProperties.ImageHeight = 50;
                        break;
                    //case "string":
                    //    dc.ColumnType = MVCxGridViewColumnType.ComboBox;
                    //    var ComboBoxEditProperties = dc.PropertiesEdit as ComboBoxProperties;
                    //    ComboBoxEditProperties.DataSource = ModelForDisplayColumnList;
                    //    ComboBoxEditProperties.TextField = "DataType";
                    //    ComboBoxEditProperties.ValueField = "Caption";
                    //    break;
                }
                ((MVCxGridView)sender).Columns.Add(dc);
            }
        };

        settings.KeyFieldName = Model.PrimaryKeyCollection;

    });
    if (ViewData["EditError"] != null){
    grid.SetEditErrorText((string)ViewData["EditError"]);
}
}


@grid.Bind(Model.DataSourceForGrid).GetHtml()
Community
  • 1
  • 1
acoi9a
  • 1

0 Answers0