This is a migrated thread and some comments may be shown as answers.

grid with popup editing and dropdownlist

3 Answers 204 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Stefano
Top achievements
Rank 1
Stefano asked on 11 Feb 2013, 08:06 AM
Hi,
I created a grid with a dropdownlist for two fields, and I have set InLine editing as the edit mode.
I want to use the popup editing method, but when I change my code to do this something goes wrong. The two fields I mentioned before, the ones with the dropdown list, are virtual attributes for a class. Each of these contain two fields: Id and Description. I want to show, in my grid, only the description. I have no problems with InLine editing, but I can't do this with popup editing: all fields are showed in my grid, and also the dropdownlist disappears.
I have another question: what are the dropdownlist and the combobox fundamental differences? Which is the better to use in a grid?


THIS IS MY CODE

AnagraficaRistoratoriEspositori.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/ViewsMasterPage.Master" %>
 
<asp:Content ID="Content1" ContentPlaceHolderID="phdContent" runat="server">
 
    <h2>Gestione Anagrafica Ristoratori/Organizzatori</h2>
 
 
<%: Html.Kendo().Grid<Sopra.Fmspa.BusinessLayer.ViewModels.AnagraficaViewModel>()
    .Name("Grid")
    .HtmlAttributes(new { Style = "height:700px; width:1200px;" })
    .Columns(columns =>
    {
        columns.Bound(e => e.Id).Hidden();
        columns.Bound(e => e.RagioneSociale)
                .Filterable(filterable => filterable.UI("RagioneSocialeFilter"))
                .Width(300);
        columns.Bound(e => e.TipologiaAnagrafica)
                .Filterable(filterable => filterable.UI("TipologiaAnagraficaFilter"))
                .Width(300)
                .ClientTemplate("# try {# #=TipologiaAnagrafica.Descrizione# #} catch (e) {}#");
        columns.Bound(e => e.Padiglione)
                .Filterable(filterable => filterable.UI("PadiglioneFilter"))
                .Width(300)
                .ClientTemplate("# try {# #=Padiglione.Descrizione# #} catch (e) {}#");
        columns.Bound(p => p.Descrizione).Width(300);
        columns.Bound(e => e.FlagEstero)
                .Filterable(filterable => filterable.UI("FlagEsteroFilter"))
                .Width(150);
        //  Batch editing
        //columns.Command(command => command.Destroy()).Width(100);
        //  InLine editing or PopUp editing
        //columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200);
        columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200);
    })
    .Resizable(resizing => resizing.Columns(true))
    .Reorderable(reordering => reordering.Columns(true))
    .Filterable(filterable => filterable
        .Extra(false)
         .Operators(operators => operators
            .ForString(str => str.Clear()
                .StartsWith("Inizia per")
                .IsEqualTo("Equivale a")
                .IsNotEqualTo("Differisce da")
            ))
        )
    .Groupable()
    //  Batch editing
    //.ToolBar(toolbar =>
    //        {
    //            toolbar.Create();
    //            toolbar.Save();
    //        })
    //  InLine editing
    //.ToolBar(toolbar => toolbar.Create())
    .ToolBar(toolbar => toolbar.Create())
    //  Batch editing
    //.Editable(editable => editable.Mode(GridEditMode.InCell))
    //  InLine editing
    //.Editable(editable => editable.Mode(GridEditMode.InLine))
    //  PopUp editing
    //.Editable(editable => editable.Mode(GridEditMode.PopUp))
    .Editable(editable => editable.Mode(GridEditMode.InLine))
    .Pageable()
    .Sortable()
    .Scrollable()
    .ColumnMenu()
    .DataSource(dataSource => dataSource
        .Ajax()
        .ServerOperation(true)
        .PageSize(100)
        .Batch(true)
        .Events(events => events.Error("error_handler"))
        .Model(model =>
            {
                model.Id(p => p.Id);
                model.Field(p => p.FlagEstero).DefaultValue(null);
            })
        .Read("Anagrafiche_Read", "Anagrafica")
        .Update("Anagrafiche_Update", "Anagrafica")
        .Create("Anagrafiche_Create", "Anagrafica")
        .Destroy("Anagrafiche_Delete", "Anagrafica")
    )
%>
 
 
<script type="text/javascript">
    function error_handler(e) {
        if (e.errors) {
            var message = "Errors:\n";
            $.each(e.errors, function (key, value) {
                if ('errors' in value) {
                    $.each(value.errors, function () {
                        message += this + "\n";
                    });
                }
            });
 
            var grid = $("#Grid").data("kendoGrid");
            grid.one("dataBinding", function (e) {
                e.preventDefault();   // cancel grid rebind if error occurs
            });
 
            alert(message);
        }
    }
 
 
    function RagioneSocialeFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_RagioneSocialeFilter") %>"
                }
            },
            optionLabel: "--Scegliere ragione sociale--"
        });
    }
 
    function TipologiaAnagraficaFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_TipologiaAnagraficaFilter") %>"
                }
            },
            optionLabel: "--Scegliere tipologia anagrafica--"
        });
    }
 
    function PadiglioneFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_PadiglioneFilter") %>"
                }
            },
            optionLabel: "--Scegliere padiglione--"
        });
    }
 
    function FlagEsteroFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_FlagEsteroFilter") %>"
                }
            },
            optionLabel: "--Espositore Estero?--"
        });
    }
</script>
 
 
</asp:Content>
 
<asp:Content ID="Content2" ContentPlaceHolderID="phdHeadContent" runat="server">
</asp:Content>

AnagraficaRepository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Web;
using System.Text;
using System.Threading.Tasks;
using Sopra.Fmspa.BusinessLayer.Models;
using Sopra.Fmspa.BusinessLayer.ViewModels;
using AutoMapper.Configuration;
using AutoMapper.Mappers;
 
 
/*   SINTASSI AUTOMAPPER
     AutoMapper.Mapper.CreateMap<Sorgente,Destinatario>();
     Destinatario dest = AutoMapper.Mapper.Map<Sorgente,Destinatario>(sorg);   */
 
 
 
namespace Sopra.Fmspa.BusinessLayer.DAL
{
    public class AnagraficaRepository : IAnagraficaRepository, IDisposable
    {
        private ODLModelContainer context;
 
 
        /*   TO DO:
         *   - vedere AnagraficaViewModel.cs
         *   - sistemare il codice in modo tale che questo mapper funzioni senza l'opzione ignore per il campo manifestazione
                                                                                                                  */
 
 
        //public AnagraficaRepository(ODLModelContainer context)
        //{
        //    this.context = context;
 
        //    AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
        //    AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
        //    AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
 
        //    AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
        //    AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
        //    AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
 
 
        //    AutoMapper.Mapper.CreateMap<Anagrafica,AnagraficaViewModel>()
        //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
        //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
        //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
        //    AutoMapper.Mapper.CreateMap<AnagraficaViewModel,Anagrafica>()
        //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
        //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
        //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
        //}
 
 
        public AnagraficaRepository(ODLModelContainer context)
        {
            this.context = context;
 
            AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
            AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
            //AutoMapper.Mapper.CreateMap<Manifestazione, ManifestazioneViewModel>();
 
            AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
            AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
            //AutoMapper.Mapper.CreateMap<ManifestazioneViewModel, Manifestazione>();
 
 
            AutoMapper.Mapper.CreateMap<Anagrafica,AnagraficaViewModel>()
                .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
                .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione));
                //.ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
            AutoMapper.Mapper.CreateMap<AnagraficaViewModel,Anagrafica>()
                .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.Ignore())
                .ForMember(dest => dest.Padiglione, opt => opt.Ignore())
                .ForMember(dest => dest.Manifestazione, opt => opt.Ignore());
        }
 
 
        //public AnagraficaRepository(ODLModelContainer context)
        //{
        //    this.context = context;
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public IEnumerable<Anagrafica> GetAnagrafica()
        {
            return context.odl_Anagrafica.ToList();
        }
 
        public IList<AnagraficaViewModel> GetAnagraficaList()
        {
            List<Anagrafica> anag = context.odl_Anagrafica.ToList();
            List<AnagraficaViewModel> anagview = AutoMapper.Mapper.Map<List<Anagrafica>,List<AnagraficaViewModel>>(anag);
            return anagview;
        }
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //public static IList<AnagraficaViewModel> All()
        //{
        //    IList<AnagraficaViewModel> result = (IList<AnagraficaViewModel>)HttpContext.Current.Session["Anagrafica"];
 
        //    if (result == null)
        //    {
        //        HttpContext.Current.Session["Anagrafica"] = result =
        //            (from anag in new ODLModelContainer().odl_Anagrafica
        //             select new AnagraficaViewModel
        //             {
        //                 Id = anag.Id,
        //                 AccountNumber = anag.AccountNumber,
        //                 RagioneSociale = anag.RagioneSociale,
        //                 TipologiaAnagraficaId = anag.TipologiaAnagraficaId,
        //                 Descrizione = anag.Descrizione,
        //                 ManifestazioneId = anag.ManifestazioneId,
        //                 PadiglioneId = anag.PadiglioneId,
        //                 Stand = anag.Stand,
        //                 FlagSolvenza = anag.FlagSolvenza,
        //                 FlagEstero = anag.FlagEstero,
 
        //                 TipologiaAnagrafica = anag.TipologiaAnagrafica,
        //                 Padiglione = anag.Padiglione
        //             }).ToList();
        //    }
 
        //    return result;
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //public static AnagraficaViewModel One(Func<AnagraficaViewModel, bool> predicate)
        //{
        //    return All().Where(predicate).FirstOrDefault();
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //public void Insert(AnagraficaViewModel anagview)
        //{
        //    if (anagview != null)
        //    {
        //        Anagrafica anag = AutoMapper.Mapper.Map<AnagraficaViewModel, Anagrafica>(anagview);
        //        context.odl_Anagrafica.Add(anag);
        //    }
        //}
 
 
        public void Insert(AnagraficaViewModel anagview)
        {
            if (anagview != null)
            {
                Anagrafica anag = AutoMapper.Mapper.Map<AnagraficaViewModel, Anagrafica>(anagview);
 
                // valore forzato
                anag.ManifestazioneId = anagview.ManifestazioneId;
 
                context.odl_Anagrafica.Add(anag);
            }
        }
 
 
        //public void Insert(AnagraficaViewModel anagview)
        //{
        //    Anagrafica anag = new Anagrafica();
 
        //    anag.Id = anagview.Id;
        //    anag.AccountNumber = anagview.AccountNumber;
        //    anag.RagioneSociale = anagview.RagioneSociale;
        //    anag.TipologiaAnagraficaId = anagview.TipologiaAnagraficaId;
        //    anag.Descrizione = anagview.Descrizione;
        //    anag.ManifestazioneId = anagview.ManifestazioneId;
        //    anag.PadiglioneId = anagview.PadiglioneId;
        //    anag.Stand = anagview.Stand;
        //    anag.FlagSolvenza = anagview.FlagSolvenza;
        //    anag.FlagEstero = anagview.FlagEstero;
 
        //    anag.TipologiaAnagrafica = anagview.TipologiaAnagrafica;
        //    anag.Padiglione = anagview.Padiglione;
 
        //    context.odl_Anagrafica.Add(anag);
        //}
 
 
        //public static void Insert(AnagraficaViewModel anag)
        //{
        //    anag.Id = All().OrderByDescending(p => p.Id).First().Id + 1;
 
        //    All().Insert(0, anag);
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public void Update(AnagraficaViewModel anagview)
        {
            if (anagview != null)
            {
                Anagrafica anag = AutoMapper.Mapper.Map<AnagraficaViewModel,Anagrafica>(anagview);
                context.odl_Anagrafica.Attach(anag);
                context.Entry(anag).State = EntityState.Modified;
            }
        }
 
 
        //public void Update(AnagraficaViewModel anagview)
        //{
        //    Anagrafica anag = context.odl_Anagrafica.Find(anagview.Id);
 
        //    if (anag != null)
        //    {
        //        anag.Id = anagview.Id;
        //        anag.AccountNumber = anagview.AccountNumber;
        //        anag.RagioneSociale = anagview.RagioneSociale;
        //        anag.TipologiaAnagraficaId = anagview.TipologiaAnagraficaId;
        //        anag.Descrizione = anagview.Descrizione;
        //        anag.ManifestazioneId = anagview.ManifestazioneId;
        //        anag.PadiglioneId = anagview.PadiglioneId;
        //        anag.Stand = anagview.Stand;
        //        anag.FlagSolvenza = anagview.FlagSolvenza;
        //        anag.FlagEstero = anagview.FlagEstero;
 
        //        anag.TipologiaAnagrafica = anagview.TipologiaAnagrafica;
        //        anag.Padiglione = anagview.Padiglione;
 
        //        context.Entry(anag).State = EntityState.Modified;
        //    }
        //}
 
 
        //public static void Update(AnagraficaViewModel anag)
        //{
        //    AnagraficaViewModel target = One(p => p.Id == anag.Id);
        //    if (target != null)
        //    {
        //        target.AccountNumber = anag.AccountNumber;
        //        target.RagioneSociale = anag.RagioneSociale;
        //        target.TipologiaAnagraficaId = anag.TipologiaAnagraficaId;
        //        target.Descrizione = anag.Descrizione;
        //        target.ManifestazioneId = anag.ManifestazioneId;
        //        target.PadiglioneId = anag.PadiglioneId;
        //        target.Stand = anag.Stand;
        //        target.FlagSolvenza = anag.FlagSolvenza;
        //        target.FlagEstero = anag.FlagEstero;
 
        //        target.TipologiaAnagrafica = anag.TipologiaAnagrafica;
        //        target.Padiglione = anag.Padiglione;
        //    }
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public void Delete(AnagraficaViewModel anagview)
        {
            Anagrafica anag = context.odl_Anagrafica.Find(anagview.Id);
            if (anag != null)
            {
                context.odl_Anagrafica.Remove(anag);
            }
        }
 
        //public static void Delete(AnagraficaViewModel anag)
        //{
        //    AnagraficaViewModel target = One(p => p.Id == anag.Id);
        //    if (target != null)
        //    {
        //        All().Remove(target);
        //    }
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public void Save()
        {
            context.SaveChanges();
        }
 
 
        private bool disposed = false;
 
        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    // dispose della classe context <--- dispose della classe ODLModelContainer
                    context.Dispose();
                }
            }
            this.disposed = true;
        }
 
        public void Dispose()
        {
            // dispose della classe IDisposable ---> GC ---> liberazione della memoria
            Dispose(true);
            GC.SuppressFinalize(this);
        }
    }
}
 
 
 
/*   TO DO:
 *   - aggiungere la possibilità di scegliere, per ogni record della grid, una manifestazione
 *   - collegamento tra la pagina manifestazioni e questa pagina (anagrafica in bianco)
 *   - migliorare l'interfaccia grafica, in particolare l'aspetto della grid
 *   - controllo ad inserimento per la ragione sociale: stabilire se una voce è già stata inserita nel database
                                                                                                                   */


AnagraficaController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;
using Sopra.Fmspa.BusinessLayer.Models;
using Sopra.Fmspa.BusinessLayer.DAL;
using Sopra.Fmspa.BusinessLayer.ViewModels;
using System.Data.Entity.Validation;
using System.Diagnostics;
using AutoMapper.Configuration;
using AutoMapper.Mappers;
 
 
/*   SINTASSI AUTOMAPPER
     AutoMapper.Mapper.CreateMap<Sorgente,Destinatario>();
     Destinatario dest = AutoMapper.Mapper.Map<Sorgente,Destinatario>(sorg);   */
 
 
 
namespace Sopra.Fmspa.BusinessLayer.Controllers
{
 
    public class AnagraficaController : Controller
    {
        ODLModelContainer db = new ODLModelContainer();
        private IAnagraficaRepository anagraficaRepository;
 
 
        //public AnagraficaController()
        //{
        //    this.anagraficaRepository = new AnagraficaRepository(new ODLModelContainer());
 
        //    AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
        //    AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
        //    AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
 
        //    AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
        //    AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
        //    AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
 
 
        //    AutoMapper.Mapper.CreateMap<Anagrafica,AnagraficaViewModel>()
        //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
        //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
        //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
        //    AutoMapper.Mapper.CreateMap<AnagraficaViewModel,Anagrafica>()
        //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
        //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
        //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
        //    //AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaViewModel>();
        //}
 
 
        public AnagraficaController()
        {
            this.anagraficaRepository = new AnagraficaRepository(new ODLModelContainer());
 
            AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
            AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
            //AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
 
            AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
            AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
            //AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
 
 
            AutoMapper.Mapper.CreateMap<Anagrafica,AnagraficaViewModel>()
                .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
                .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione));
                //.ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
            AutoMapper.Mapper.CreateMap<AnagraficaViewModel,Anagrafica>()
                .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.Ignore())
                .ForMember(dest => dest.Padiglione, opt => opt.Ignore())
                .ForMember(dest => dest.Manifestazione, opt => opt.Ignore());
 
            //AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaViewModel>();
        }
 
 
        public AnagraficaController(IAnagraficaRepository anagraficaRepository)
        {
            this.anagraficaRepository = anagraficaRepository;
        }
 
 
        public ActionResult Remote_Data()
        {
            return View("AjaxBinding");
        }
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult AnagraficaRistoratoriEspositori()
        {
            IList<AnagraficaViewModel> anagview = anagraficaRepository.GetAnagraficaList();
 
            PopulateTipologiaAnagrafica();
            PopulatePadiglione();
 
            return View(anagview);
        }
 
 
        //public ActionResult AnagraficaRistoratoriEspositori()
        //{
        //    IEnumerable<Anagrafica> anag = anagraficaRepository.GetAnagrafica();
 
        //    PopulateTipologiaAnagrafica();
        //    PopulatePadiglione();
 
        //    return View(anag);
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult Anagrafiche_Read([DataSourceRequest] DataSourceRequest request)
        {
            return Json(anagraficaRepository.GetAnagraficaList().ToDataSourceResult(request));
        }
 
 
        //public ActionResult Anagrafiche_Read([DataSourceRequest] DataSourceRequest request)
        //{
        //    return Json(AnagraficaRepository.All().ToDataSourceResult(request));
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult Anagrafiche_RagioneSocialeFilter()
        {
            return Json(anagraficaRepository.GetAnagrafica().Select(e => e.RagioneSociale).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
        public ActionResult Anagrafiche_TipologiaAnagraficaFilter()
        {
            return Json(anagraficaRepository.GetAnagrafica().Select(e => e.TipologiaAnagrafica).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
        public ActionResult Anagrafiche_PadiglioneFilter()
        {
            return Json(anagraficaRepository.GetAnagrafica().Select(e => e.Padiglione).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
        public ActionResult Anagrafiche_FlagEsteroFilter()
        {
            return Json(anagraficaRepository.GetAnagrafica().Select(e => e.FlagEstero).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            anagraficaRepository.Insert(anag);
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        {
            if (anagrafiche != null && ModelState.IsValid)
            {
                foreach (var anag in anagrafiche)
                {
                    anag.Id = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().Id + 1;
                    anag.TipologiaAnagraficaId = anag.TipologiaAnagrafica.Id;
                    anag.PadiglioneId = anag.Padiglione.Id;
 
                    // valore forzato
                    if (anag.ManifestazioneId == null)
                    {
                        //anag.Manifestazione.Id = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().Manifestazione.Id;
                        anag.ManifestazioneId = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().ManifestazioneId;
                    }
                    //anag.ManifestazioneId = anag.Manifestazione.Id;
 
                    anagraficaRepository.Insert(anag);
                }
                anagraficaRepository.Save();
            }
            return Json(ModelState.ToDataSourceResult());
        }
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    var results = new List<AnagraficaViewModel>();
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            anagraficaRepository.Insert(anag);
        //            results.Add(anag);
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(results.ToDataSourceResult(request, ModelState));
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        private void PopulateTipologiaAnagrafica()
        {
            ViewData["TipologiaAnagrafiche"] = AutoMapper.Mapper.Map<IList<TipologiaAnagrafica>,IList<TipologiaAnagraficaViewModel>>(db.odl_TipologiaAnagrafica.ToList());
        }
 
        private void PopulatePadiglione()
        {
            ViewData["Padiglioni"] = AutoMapper.Mapper.Map<IList<Padiglione>,IList<PadiglioneViewModel>>(db.odl_Padiglione.ToList());
        }
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            anag.TipologiaAnagrafica.Id = anag.TipologiaAnagraficaId;
        //            anag.Padiglione.Id = anag.PadiglioneId;
        //            anag.Manifestazione.Id = anag.ManifestazioneId;
 
        //            anagraficaRepository.Update(anag);
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        {
            if (anagrafiche != null && ModelState.IsValid)
            {
                foreach (var anag in anagrafiche)
                {
                    anag.TipologiaAnagrafica.Id = anag.TipologiaAnagraficaId;
                    anag.Padiglione.Id = anag.PadiglioneId;
                    //anag.Manifestazione.Id = anag.ManifestazioneId;
 
                    anagraficaRepository.Update(anag);
                }
                anagraficaRepository.Save();
            }
            return Json(ModelState.ToDataSourceResult());
        }
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            var target = AnagraficaRepository.One(p => p.Id == anag.Id);
        //            if (target != null)
        //            {
        //                target = AutoMapper.Mapper.Map<AnagraficaViewModel, AnagraficaViewModel>(anag);
        //                anagraficaRepository.Update(target);
        //            }
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            var target = AnagraficaRepository.One(p => p.Id == anag.Id);
        //            if (target != null)
        //            {
        //                target.AccountNumber = anag.AccountNumber;
        //                target.RagioneSociale = anag.RagioneSociale;
        //                target.TipologiaAnagraficaId = anag.TipologiaAnagraficaId;
        //                target.Descrizione = anag.Descrizione;
        //                target.ManifestazioneId = anag.ManifestazioneId;
        //                target.PadiglioneId = anag.PadiglioneId;
        //                target.Stand = anag.Stand;
        //                target.FlagSolvenza = anag.FlagSolvenza;
        //                target.FlagEstero = anag.FlagEstero;
 
        //                target.TipologiaAnagrafica = anag.TipologiaAnagrafica;
        //                target.Padiglione = anag.Padiglione;
 
        //                anagraficaRepository.Update(target);
        //            }
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult Anagrafiche_Delete([Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        {
            if (anagrafiche.Any())
            {
                Anagrafiche_Destroy(anagrafiche);
            }
            else
            {
                return HttpNotFound();
            }
 
            return Json(ModelState.ToDataSourceResult());
        }
 
        [HttpPost, ActionName("Anagrafiche_Delete")]
        public void Anagrafiche_Destroy([Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        {
            if (ModelState.IsValid)
            {
                foreach (var anag in anagrafiche)
                {
                    anagraficaRepository.Delete(anag);
                }
            }
            anagraficaRepository.Save();
        }
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Destroy([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche.Any() && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            anagraficaRepository.Delete(anag);
        //        }
        //    }
        //    anagraficaRepository.Save();
 
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
    }
 
}
 
 
 
/*   TO DO:
 *   - aggiungere la possibilità di scegliere, per ogni record della grid, una manifestazione
 *   - collegamento tra la pagina manifestazioni e questa pagina (anagrafica in bianco)
 *   - migliorare l'interfaccia grafica, in particolare l'aspetto della grid
 *   - controllo ad inserimento per la ragione sociale: stabilire se una voce è già stata inserita nel database
                                                                                                                   */

3 Answers, 1 is accepted

Sort by
0
Daniel
Telerik team
answered on 13 Feb 2013, 08:40 AM
Hello Alessandro,

In popupediting mode the Grid uses the EditorForModel helper to generate the template which by default does not render the editors for complex types. You could either use custom popup template as demonstrated in this code library or override the MVC default object template. With the custom editor template approach you could also add the editors only for the needed fields.When the automatic template is used you could decorate the properties that should not be shown in the when editing with the ScaffoldColumn or HiddenInput attributes.
Regarding your question about the difference between a dropdown and a combobox - the combobox allows entering custom values and filtering the data based on the input. The dropdown allows a value to be set only by choosing an item from its data.

Regards,
Daniel
the Telerik team
Join us on our journey to create the world's most complete HTML 5 UI Framework - download Kendo UI now!
0
Stefano
Top achievements
Rank 1
answered on 13 Feb 2013, 10:48 AM
Thank you for the answer. I tried to create a custom template for the PopUp editing mode (see file AnagraficaEditingTemplate.ascx).
Now my problem is that, again, I can't visualize the dropdownlist (the one I mentioned before) in the popup window. Excuse me, can you tell me what's wrong in the code I just wrote? I think that the problem is in the view template.


AnagraficaRistoratoriEspositori.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/ViewsMasterPage.Master" %>
 
<asp:Content ID="Content1" ContentPlaceHolderID="phdContent" runat="server">
 
    <h2>Gestione Anagrafica Ristoratori/Organizzatori</h2>
 
 
 
<div>
<%= Html.Kendo().AutoComplete()
          .Name("RagioneSociale")
          .Filter("startswith")
          .Placeholder("Inserire Ragione Sociale...")
          .DataTextField("RagioneSociale")
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("GetData", "Anagrafica");
              })
              .ServerFiltering(true); //If true the DataSource will not filter the data on the client
          })
          .HtmlAttributes(new { style = "width:250px" })
          .Separator(", ")
    %>
 
<%= Html.Kendo().AutoComplete()
          .Name("TipologiaAnagrafica")
          .Filter("startswith")
          .Placeholder("Inserire Tipologia Anagrafica...")
          .DataTextField("TipologiaAnagrafica")
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("GetData", "Anagrafica");
              })
              .ServerFiltering(true); //If true the DataSource will not filter the data on the client
          })
          .HtmlAttributes(new { style = "width:250px" })
          .Separator(", ")
    %>
 
<%= Html.Kendo().AutoComplete()
          .Name("Padiglione")
          .Filter("startswith")
          .Placeholder("Inserire Padiglione...")
          .DataTextField("Padiglione")
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("GetData", "Anagrafica");
              })
              .ServerFiltering(true); //If true the DataSource will not filter the data on the client
          })
          .HtmlAttributes(new { style = "width:250px" })
          .Separator(", ")
    %>
 
<input type = "checkbox" name = "FlagEstero" id = "FlagEstero" aria-labelledby = "Flag Estero"/>
 
<input type = "button" name = "Search" id = "Search" contenteditable = "true" title = "Search" aria-labelledby = "Search" value = "Search"/>
</div>
 
 
 
<%: Html.Kendo().Grid<Sopra.Fmspa.BusinessLayer.ViewModels.AnagraficaViewModel>()
    .Name("Grid")
    .HtmlAttributes(new { Style = "height:700px; width:1200px;" })
    .Columns(columns =>
    {
        columns.Bound(e => e.Id).Hidden();
        columns.Bound(e => e.RagioneSociale)
                .Filterable(filterable => filterable.UI("RagioneSocialeFilter"))
                .Width(300);
        columns.Bound(e => e.TipologiaAnagrafica)
                .Filterable(filterable => filterable.UI("TipologiaAnagraficaFilter"))
                .Width(300)
                .ClientTemplate("# try {# #=TipologiaAnagrafica.Descrizione# #} catch (e) {}#");
        columns.Bound(e => e.Padiglione)
                .Filterable(filterable => filterable.UI("PadiglioneFilter"))
                .Width(300)
                .ClientTemplate("# try {# #=Padiglione.Descrizione# #} catch (e) {}#");
        columns.Bound(p => p.Descrizione).Width(300);
        columns.Bound(e => e.FlagEstero)
                .Filterable(filterable => filterable.UI("FlagEsteroFilter"))
                .Width(150);
        //  Batch editing
        //columns.Command(command => command.Destroy()).Width(100);
        //  InLine editing or PopUp editing
        //columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200);
        columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200);
    })
    .Resizable(resizing => resizing.Columns(true))
    .Reorderable(reordering => reordering.Columns(true))
    .Filterable(filterable => filterable
        .Extra(false)
         .Operators(operators => operators
            .ForString(str => str.Clear()
                .StartsWith("Inizia per")
                .IsEqualTo("Equivale a")
                .IsNotEqualTo("Differisce da")
            ))
        )
    //  Batch editing
    //.ToolBar(toolbar =>
    //        {
    //            toolbar.Create();
    //            toolbar.Save();
    //        })
    //  InLine editing
    //.ToolBar(toolbar => toolbar.Create())
    .ToolBar(toolbar => toolbar.Create())
    //  Batch editing
    //.Editable(editable => editable.Mode(GridEditMode.InCell))
    //  InLine editing
    //.Editable(editable => editable.Mode(GridEditMode.InLine))
    //  PopUp editing
    //.Editable(editable => editable.Mode(GridEditMode.PopUp))
    .Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("AnagraficaEditingTemplate"))
    .Pageable()
    .Sortable()
    .Scrollable()
    .ColumnMenu()
    .DataSource(dataSource => dataSource
        .Ajax()
        .ServerOperation(true)
        .PageSize(100)
        .Batch(true)
        .Events(events => events.Error("error_handler"))
        .Model(model =>
            {
                model.Id(p => p.Id);
                model.Field(p => p.FlagEstero).DefaultValue(null);
            })
        .Read("Anagrafiche_Read", "Anagrafica")
        .Update("Anagrafiche_Update", "Anagrafica")
        .Create("Anagrafiche_Create", "Anagrafica")
        .Destroy("Anagrafiche_Delete", "Anagrafica")
    )
%>
 
 
 
<script>
    $("#Search").click(function () {
        $filter = new Array();
 
        $RagioneSociale = $("#RagioneSociale").val();
        $TipologiaAnagrafica = $("#TipologiaAnagrafica").data("kendoComboBox").value();
        $Padiglione = $("Padiglione").data("kendoComboBox").value();
        $FlagEstero = $("#FlagEstero").val();
 
        if ($RagioneSociale) {
            $filter.push({ field: "RagioneSociale", operator: "contains", value: $RagioneSociale });
        }
 
        if ($TipologiaAnagrafica) {
            $filter.push({ field: "TipologiaAnagrafica", operator: "contains", value: $TipologiaAnagrafica });
        }
 
        if ($Padiglione) {
            $filter.push({ field: "Padiglione", operator: "eq", value: $Padiglione });
        }
         
 
        if ($FlagEstero) {
            $filter.push({ field: "FlagEstero", operator: "eq", value: $FlagEstero });
        }
 
 
        var Grid = $("#Grid").data("kendoGrid");
        Grid.dataSource.filter({
            logic: "or",
            filters: $filter
        });
 
 
    });
</script>
 
 
 
<script type="text/javascript">
 
    function error_handler(e) {
        if (e.errors) {
            var message = "Errori:\n";
            $.each(e.errors, function (key, value) {
                if ('errors' in value) {
                    $.each(value.errors, function () {
                        message += this + "\n";
                    });
                }
            });
 
            var grid = $("#Grid").data("kendoGrid");
            grid.one("dataBinding", function (e) {
                e.preventDefault();   // cancel grid rebind if error occurs
            });
 
            alert(message);
        }
    }
 
 
    function RagioneSocialeFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_RagioneSocialeFilter") %>"
                }
            },
            optionLabel: "--Scegliere ragione sociale--"
        });
    }
 
    function TipologiaAnagraficaFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_TipologiaAnagraficaFilter") %>"
                }
            },
            optionLabel: "--Scegliere tipologia anagrafica--"
        });
    }
 
    function PadiglioneFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_PadiglioneFilter") %>"
                }
            },
            optionLabel: "--Scegliere padiglione--"
        });
    }
 
    function FlagEsteroFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_FlagEsteroFilter") %>"
                }
            },
            optionLabel: "--Espositore Estero?--"
        });
    }
 
</script>
 
 
 
</asp:Content>
 
<asp:Content ID="Content2" ContentPlaceHolderID="phdHeadContent" runat="server">
</asp:Content>

AnagraficaEditingTemplate.aspx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Sopra.Fmspa.BusinessLayer.ViewModels.AnagraficaViewModel>" %>
 
 
<div class="editor-label">
    <%: Html.LabelFor(model => model.RagioneSociale) %>
</div>
<div class="editor-field">
    <%: Html.EditorFor(model => model.RagioneSociale) %>
    <%: Html.ValidationMessageFor(model => model.RagioneSociale) %>
</div>
 
 
<div class="editor-label">
    <%: Html.LabelFor(model => model.TipologiaAnagrafica)%>
</div>
<div class="editor-field">
    <%:Html.Kendo().DropDownList()
           .Name("TipologiaAnagrafica")
           .DataTextField("Descrizione")
           .BindTo((System.Collections.IEnumerable)ViewData["TipologiaAnagrafiche"])
    %>
    <%: Html.ValidationMessageFor(model => model.TipologiaAnagrafica)%>
</div>
 
<div class="editor-label">
    <%: Html.LabelFor(model => model.Padiglione)%>
</div>
<div class="editor-field">
    <%:Html.Kendo().DropDownList()
           .Name("Padiglione")
           .DataTextField("Descrizione")
           .BindTo((System.Collections.IEnumerable)ViewData["Padiglioni"])
    %>
    <%: Html.ValidationMessageFor(model => model.Padiglione)%>
</div>
 
 
<div class="editor-label">
    <%: Html.LabelFor(model => model.Descrizione) %>
</div>
<div class="editor-field">
    <%: Html.EditorFor(model => model.Descrizione) %>
    <%: Html.ValidationMessageFor(model => model.Descrizione) %>
</div>
 
 
<div class="editor-label">
    <%: Html.LabelFor(model => model.FlagEstero) %>
</div>
<div class="editor-field">
    <%: Html.EditorFor(model => model.FlagEstero) %>
    <%: Html.ValidationMessageFor(model => model.FlagEstero) %>
</div>

AnagraficaController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;
using Sopra.Fmspa.BusinessLayer.Models;
using Sopra.Fmspa.BusinessLayer.DAL;
using Sopra.Fmspa.BusinessLayer.ViewModels;
using System.Data.Entity.Validation;
using System.Diagnostics;
using AutoMapper.Configuration;
using AutoMapper.Mappers;
 
 
/*   SINTASSI AUTOMAPPER
     AutoMapper.Mapper.CreateMap<Sorgente,Destinatario>();
     Destinatario dest = AutoMapper.Mapper.Map<Sorgente,Destinatario>(sorg);   */
 
 
 
namespace Sopra.Fmspa.BusinessLayer.Controllers
{
 
    public class AnagraficaController : Controller
    {
        ODLModelContainer db = new ODLModelContainer();
        private IAnagraficaRepository anagraficaRepository;
 
 
        //public AnagraficaController()
        //{
        //    this.anagraficaRepository = new AnagraficaRepository(new ODLModelContainer());
 
        //    AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
        //    AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
        //    AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
 
        //    AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
        //    AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
        //    AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
 
 
        //    AutoMapper.Mapper.CreateMap<Anagrafica,AnagraficaViewModel>()
        //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
        //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
        //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
        //    AutoMapper.Mapper.CreateMap<AnagraficaViewModel,Anagrafica>()
        //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
        //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
        //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
        //    //AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaViewModel>();
        //}
 
 
        public AnagraficaController()
        {
            this.anagraficaRepository = new AnagraficaRepository(new ODLModelContainer());
 
            AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
            AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
            //AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
 
            AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
            AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
            //AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
 
 
            AutoMapper.Mapper.CreateMap<AnagraficaInBianco,AnagraficaViewModel>()
                .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
                .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione));
                //.ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
            AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaInBianco>()
                .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.Ignore())
                .ForMember(dest => dest.Padiglione, opt => opt.Ignore())
                .ForMember(dest => dest.Manifestazione, opt => opt.Ignore());
 
            //AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaViewModel>();
        }
 
 
        public AnagraficaController(IAnagraficaRepository anagraficaRepository)
        {
            this.anagraficaRepository = anagraficaRepository;
        }
 
 
        public ActionResult Remote_Data()
        {
            return View("AjaxBinding");
        }
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult AnagraficaRistoratoriEspositori()
        {
            IList<AnagraficaViewModel> anagview = anagraficaRepository.GetAnagraficaList();
 
            PopulateTipologiaAnagrafica();
            PopulatePadiglione();
 
            return View(anagview);
        }
 
 
        //public ActionResult AnagraficaRistoratoriEspositori()
        //{
        //    IEnumerable<Anagrafica> anag = anagraficaRepository.GetAnagrafica();
 
        //    PopulateTipologiaAnagrafica();
        //    PopulatePadiglione();
 
        //    return View(anag);
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult Anagrafiche_Read([DataSourceRequest] DataSourceRequest request)
        {
            return Json(anagraficaRepository.GetAnagraficaList().ToDataSourceResult(request));
        }
 
 
        //public ActionResult Anagrafiche_Read([DataSourceRequest] DataSourceRequest request)
        //{
        //    return Json(AnagraficaRepository.All().ToDataSourceResult(request));
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult Anagrafiche_RagioneSocialeFilter()
        {
            return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.RagioneSociale).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
        public ActionResult Anagrafiche_TipologiaAnagraficaFilter()
        {
            return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.TipologiaAnagrafica).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
        public ActionResult Anagrafiche_PadiglioneFilter()
        {
            return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.Padiglione).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
        public ActionResult Anagrafiche_FlagEsteroFilter()
        {
            return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.FlagEstero).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            anagraficaRepository.Insert(anag);
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        {
            if (anagrafiche != null && ModelState.IsValid)
            {
                foreach (var anag in anagrafiche)
                {
                    anag.Id = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().Id + 1;
                    anag.TipologiaAnagraficaId = anag.TipologiaAnagrafica.Id;
                    anag.PadiglioneId = anag.Padiglione.Id;
 
                    // valore forzato
                    if (anag.ManifestazioneId == null)
                    {
                        //anag.Manifestazione.Id = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().Manifestazione.Id;
                        anag.ManifestazioneId = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().ManifestazioneId;
                    }
                    //anag.ManifestazioneId = anag.Manifestazione.Id;
 
                    anagraficaRepository.Insert(anag);
                }
                anagraficaRepository.Save();
            }
            return Json(ModelState.ToDataSourceResult());
        }
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    var results = new List<AnagraficaViewModel>();
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            anagraficaRepository.Insert(anag);
        //            results.Add(anag);
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(results.ToDataSourceResult(request, ModelState));
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        private void PopulateTipologiaAnagrafica()
        {
            ViewData["TipologiaAnagrafiche"] = AutoMapper.Mapper.Map<IList<TipologiaAnagrafica>,IList<TipologiaAnagraficaViewModel>>(db.odl_TipologiaAnagrafica.ToList());
        }
 
        private void PopulatePadiglione()
        {
            ViewData["Padiglioni"] = AutoMapper.Mapper.Map<IList<Padiglione>,IList<PadiglioneViewModel>>(db.odl_vw_PADIGLIONI.ToList());
        }
 
 
        public ActionResult GetData()
        {
            return Json(anagraficaRepository.GetAnagraficaList(), JsonRequestBehavior.AllowGet);
        }
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            anag.TipologiaAnagrafica.Id = anag.TipologiaAnagraficaId;
        //            anag.Padiglione.Id = anag.PadiglioneId;
        //            anag.Manifestazione.Id = anag.ManifestazioneId;
 
        //            anagraficaRepository.Update(anag);
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        {
            if (anagrafiche != null && ModelState.IsValid)
            {
                foreach (var anag in anagrafiche)
                {
                    anag.TipologiaAnagrafica.Id = anag.TipologiaAnagraficaId;
                    anag.Padiglione.Id = anag.PadiglioneId;
                    //anag.Manifestazione.Id = anag.ManifestazioneId;
 
                    anagraficaRepository.Update(anag);
                }
                anagraficaRepository.Save();
            }
            return Json(ModelState.ToDataSourceResult());
        }
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            var target = AnagraficaRepository.One(p => p.Id == anag.Id);
        //            if (target != null)
        //            {
        //                target = AutoMapper.Mapper.Map<AnagraficaViewModel, AnagraficaViewModel>(anag);
        //                anagraficaRepository.Update(target);
        //            }
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            var target = AnagraficaRepository.One(p => p.Id == anag.Id);
        //            if (target != null)
        //            {
        //                target.AccountNumber = anag.AccountNumber;
        //                target.RagioneSociale = anag.RagioneSociale;
        //                target.TipologiaAnagraficaId = anag.TipologiaAnagraficaId;
        //                target.Descrizione = anag.Descrizione;
        //                target.ManifestazioneId = anag.ManifestazioneId;
        //                target.PadiglioneId = anag.PadiglioneId;
        //                target.Stand = anag.Stand;
        //                target.FlagSolvenza = anag.FlagSolvenza;
        //                target.FlagEstero = anag.FlagEstero;
 
        //                target.TipologiaAnagrafica = anag.TipologiaAnagrafica;
        //                target.Padiglione = anag.Padiglione;
 
        //                anagraficaRepository.Update(target);
        //            }
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult Anagrafiche_Delete([Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        {
            if (anagrafiche.Any())
            {
                Anagrafiche_Destroy(anagrafiche);
            }
            else
            {
                return HttpNotFound();
            }
 
            return Json(ModelState.ToDataSourceResult());
        }
 
        [HttpPost, ActionName("Anagrafiche_Delete")]
        public void Anagrafiche_Destroy([Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        {
            if (ModelState.IsValid)
            {
                foreach (var anag in anagrafiche)
                {
                    anagraficaRepository.Delete(anag);
                }
            }
            anagraficaRepository.Save();
        }
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Destroy([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche.Any() && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            anagraficaRepository.Delete(anag);
        //        }
        //    }
        //    anagraficaRepository.Save();
 
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
    }
 
}
 
 
 
/*   TO DO:
 *   - aggiungere la possibilità di scegliere, per ogni record della grid, una manifestazione
 *   - collegamento tra la pagina manifestazioni e questa pagina (anagrafica in bianco)
                                                                                                                   */
0
Stefano
Top achievements
Rank 1
answered on 13 Feb 2013, 03:26 PM

Hi again, I've already resolved the problem: I had assigned the same ID to two objects, so they didn't work as I wanted. Now all problems are fixed.
Thank you again for the help.

Now I post here my code for anyone that may need it. With this code one can generate a web page with:
- a kendo grid with basic CRUD methods, where the insert/edit method is set as PopUp editing and where each column has a customized menu
- sorting and filtering methods "inside of" the grid
- data are read from a server database
- two column fields are virtual attributes of a class --> the corresponding data are visualized with a dropdownlist
- outside of the grid there are three kendo autocomplete textboxes and a checkbox that are used to filter the grid's content; the filtering rule of these objects is set to "and", and the filter can be used by pressing the "Search" button.


THIS IS MY CODE

IAnagraficaRepository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Threading.Tasks;
using Sopra.Fmspa.BusinessLayer.Models;
using Sopra.Fmspa.BusinessLayer.ViewModels;
 
namespace Sopra.Fmspa.BusinessLayer.DAL
{
    public interface IAnagraficaRepository : IDisposable
    {
        IEnumerable<AnagraficaInBianco> GetAnagrafica();
        IList<AnagraficaViewModel> GetAnagraficaList();
 
        void Insert(AnagraficaViewModel anag);
        void Update(AnagraficaViewModel anag);
        void Delete(AnagraficaViewModel anag);
        void Save();
    }
}

AnagraficaRepository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Web;
using System.Text;
using System.Threading.Tasks;
using Sopra.Fmspa.BusinessLayer.Models;
using Sopra.Fmspa.BusinessLayer.ViewModels;
using AutoMapper.Configuration;
using AutoMapper.Mappers;
 
 
/*   SINTASSI AUTOMAPPER
     AutoMapper.Mapper.CreateMap<Sorgente,Destinatario>();
     Destinatario dest = AutoMapper.Mapper.Map<Sorgente,Destinatario>(sorg);   */
 
 
 
namespace Sopra.Fmspa.BusinessLayer.DAL
{
    public class AnagraficaRepository : IAnagraficaRepository, IDisposable
    {
        private ODLModelContainer context;
 
 
        /*   TO DO:
         *   - vedere AnagraficaViewModel.cs
         *   - sistemare il codice in modo tale che questo mapper funzioni senza l'opzione ignore per il campo manifestazione
                                                                                                                  */
 
 
        //public AnagraficaRepository(ODLModelContainer context)
        //{
        //    this.context = context;
 
        //    AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
        //    AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
        //    AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
 
        //    AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
        //    AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
        //    AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
 
 
        //    AutoMapper.Mapper.CreateMap<Anagrafica,AnagraficaViewModel>()
        //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
        //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
        //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
        //    AutoMapper.Mapper.CreateMap<AnagraficaViewModel,Anagrafica>()
        //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
        //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
        //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
        //}
 
 
        public AnagraficaRepository(ODLModelContainer context)
        {
            this.context = context;
 
            AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
            AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
            //AutoMapper.Mapper.CreateMap<Manifestazione, ManifestazioneViewModel>();
 
            AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
            AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
            //AutoMapper.Mapper.CreateMap<ManifestazioneViewModel, Manifestazione>();
 
 
            AutoMapper.Mapper.CreateMap<AnagraficaInBianco,AnagraficaViewModel>()
                .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
                .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione));
                //.ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
            AutoMapper.Mapper.CreateMap<AnagraficaViewModel, AnagraficaInBianco>()
                .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.Ignore())
                .ForMember(dest => dest.Padiglione, opt => opt.Ignore())
                .ForMember(dest => dest.Manifestazione, opt => opt.Ignore());
        }
 
 
        //public AnagraficaRepository(ODLModelContainer context)
        //{
        //    this.context = context;
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public IEnumerable<AnagraficaInBianco> GetAnagrafica()
        {
            return context.odl_AnagraficaInBianco.ToList();
        }
 
        public IList<AnagraficaViewModel> GetAnagraficaList()
        {
            List<AnagraficaInBianco> anag = context.odl_AnagraficaInBianco.ToList();
            List<AnagraficaViewModel> anagview = AutoMapper.Mapper.Map<List<AnagraficaInBianco>,List<AnagraficaViewModel>>(anag);
            return anagview;
        }
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //public static IList<AnagraficaViewModel> All()
        //{
        //    IList<AnagraficaViewModel> result = (IList<AnagraficaViewModel>)HttpContext.Current.Session["Anagrafica"];
 
        //    if (result == null)
        //    {
        //        HttpContext.Current.Session["Anagrafica"] = result =
        //            (from anag in new ODLModelContainer().odl_Anagrafica
        //             select new AnagraficaViewModel
        //             {
        //                 Id = anag.Id,
        //                 AccountNumber = anag.AccountNumber,
        //                 RagioneSociale = anag.RagioneSociale,
        //                 TipologiaAnagraficaId = anag.TipologiaAnagraficaId,
        //                 Descrizione = anag.Descrizione,
        //                 ManifestazioneId = anag.ManifestazioneId,
        //                 PadiglioneId = anag.PadiglioneId,
        //                 Stand = anag.Stand,
        //                 FlagSolvenza = anag.FlagSolvenza,
        //                 FlagEstero = anag.FlagEstero,
 
        //                 TipologiaAnagrafica = anag.TipologiaAnagrafica,
        //                 Padiglione = anag.Padiglione
        //             }).ToList();
        //    }
 
        //    return result;
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //public static AnagraficaViewModel One(Func<AnagraficaViewModel, bool> predicate)
        //{
        //    return All().Where(predicate).FirstOrDefault();
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //public void Insert(AnagraficaViewModel anagview)
        //{
        //    if (anagview != null)
        //    {
        //        Anagrafica anag = AutoMapper.Mapper.Map<AnagraficaViewModel, Anagrafica>(anagview);
        //        context.odl_Anagrafica.Add(anag);
        //    }
        //}
 
 
        public void Insert(AnagraficaViewModel anagview)
        {
            if (anagview != null)
            {
                AnagraficaInBianco anag = AutoMapper.Mapper.Map<AnagraficaViewModel, AnagraficaInBianco>(anagview);
 
                // valore forzato
                anag.ManifestazioneId = anagview.ManifestazioneId;
 
                context.odl_AnagraficaInBianco.Add(anag);
            }
        }
 
 
        //public void Insert(AnagraficaViewModel anagview)
        //{
        //    Anagrafica anag = new Anagrafica();
 
        //    anag.Id = anagview.Id;
        //    anag.AccountNumber = anagview.AccountNumber;
        //    anag.RagioneSociale = anagview.RagioneSociale;
        //    anag.TipologiaAnagraficaId = anagview.TipologiaAnagraficaId;
        //    anag.Descrizione = anagview.Descrizione;
        //    anag.ManifestazioneId = anagview.ManifestazioneId;
        //    anag.PadiglioneId = anagview.PadiglioneId;
        //    anag.Stand = anagview.Stand;
        //    anag.FlagSolvenza = anagview.FlagSolvenza;
        //    anag.FlagEstero = anagview.FlagEstero;
 
        //    anag.TipologiaAnagrafica = anagview.TipologiaAnagrafica;
        //    anag.Padiglione = anagview.Padiglione;
 
        //    context.odl_Anagrafica.Add(anag);
        //}
 
 
        //public static void Insert(AnagraficaViewModel anag)
        //{
        //    anag.Id = All().OrderByDescending(p => p.Id).First().Id + 1;
 
        //    All().Insert(0, anag);
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public void Update(AnagraficaViewModel anagview)
        {
            if (anagview != null)
            {
                AnagraficaInBianco anag = AutoMapper.Mapper.Map<AnagraficaViewModel,AnagraficaInBianco>(anagview);
                context.odl_AnagraficaInBianco.Attach(anag);
                context.Entry(anag).State = EntityState.Modified;
            }
        }
 
 
        //public void Update(AnagraficaViewModel anagview)
        //{
        //    Anagrafica anag = context.odl_Anagrafica.Find(anagview.Id);
 
        //    if (anag != null)
        //    {
        //        anag.Id = anagview.Id;
        //        anag.AccountNumber = anagview.AccountNumber;
        //        anag.RagioneSociale = anagview.RagioneSociale;
        //        anag.TipologiaAnagraficaId = anagview.TipologiaAnagraficaId;
        //        anag.Descrizione = anagview.Descrizione;
        //        anag.ManifestazioneId = anagview.ManifestazioneId;
        //        anag.PadiglioneId = anagview.PadiglioneId;
        //        anag.Stand = anagview.Stand;
        //        anag.FlagSolvenza = anagview.FlagSolvenza;
        //        anag.FlagEstero = anagview.FlagEstero;
 
        //        anag.TipologiaAnagrafica = anagview.TipologiaAnagrafica;
        //        anag.Padiglione = anagview.Padiglione;
 
        //        context.Entry(anag).State = EntityState.Modified;
        //    }
        //}
 
 
        //public static void Update(AnagraficaViewModel anag)
        //{
        //    AnagraficaViewModel target = One(p => p.Id == anag.Id);
        //    if (target != null)
        //    {
        //        target.AccountNumber = anag.AccountNumber;
        //        target.RagioneSociale = anag.RagioneSociale;
        //        target.TipologiaAnagraficaId = anag.TipologiaAnagraficaId;
        //        target.Descrizione = anag.Descrizione;
        //        target.ManifestazioneId = anag.ManifestazioneId;
        //        target.PadiglioneId = anag.PadiglioneId;
        //        target.Stand = anag.Stand;
        //        target.FlagSolvenza = anag.FlagSolvenza;
        //        target.FlagEstero = anag.FlagEstero;
 
        //        target.TipologiaAnagrafica = anag.TipologiaAnagrafica;
        //        target.Padiglione = anag.Padiglione;
        //    }
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public void Delete(AnagraficaViewModel anagview)
        {
            AnagraficaInBianco anag = context.odl_AnagraficaInBianco.Find(anagview.Id);
            if (anag != null)
            {
                context.odl_AnagraficaInBianco.Remove(anag);
            }
        }
 
        //public static void Delete(AnagraficaViewModel anag)
        //{
        //    AnagraficaViewModel target = One(p => p.Id == anag.Id);
        //    if (target != null)
        //    {
        //        All().Remove(target);
        //    }
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public void Save()
        {
            context.SaveChanges();
        }
 
 
        private bool disposed = false;
 
        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    // dispose della classe context <--- dispose della classe ODLModelContainer
                    context.Dispose();
                }
            }
            this.disposed = true;
        }
 
        public void Dispose()
        {
            // dispose della classe IDisposable ---> GC ---> liberazione della memoria
            Dispose(true);
            GC.SuppressFinalize(this);
        }
    }
}
 
 
 
/*   TO DO:
 *   - aggiungere la possibilità di scegliere, per ogni record della grid, una manifestazione
 *   - collegamento tra la pagina manifestazioni e questa pagina (anagrafica in bianco)
                                                                                                                   */

AnagraficaViewModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sopra.Fmspa.BusinessLayer.Models;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Sopra.Fmspa.BusinessLayer.ViewModelsValidators;
 
namespace Sopra.Fmspa.BusinessLayer.ViewModels
{
    [FluentValidation.Attributes.Validator(typeof(AnagraficaViewModelValidator))]
    public class AnagraficaViewModel
    {
        //[Required(ErrorMessage = "Il campo Id è obbligatorio")]
        [Display(Name = "Id Anagrafica")]
        [DisplayFormat(NullDisplayText = "Id assente")]
        [ScaffoldColumn(false)]
        public int Id { get; set; }
 
        public string AccountNumber { get; set; }
 
        //[Required(ErrorMessage = "Il campo Ragione Sociale è obbligatorio")]
        [Display(Name = "Ragione Sociale")]
        //[DisplayFormat(NullDisplayText = "")]
        public string RagioneSociale { get; set; }
 
        //  //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
        [Display(Name = "Id Tipologia Anagrafica")]
        [DisplayFormat(NullDisplayText = "Id assente")]
        [ScaffoldColumn(false)]
        public string TipologiaAnagraficaId { get; set; }
 
        //  //[Required(ErrorMessage = "Il campo Descrizione è obbligatorio")]
        [DisplayFormat(NullDisplayText = "")]
        public string Descrizione { get; set; }
 
        //  //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
        [Display(Name = "Id Manifestazione")]
        [DisplayFormat(NullDisplayText = "Id assente")]
        [ScaffoldColumn(false)]
        public string ManifestazioneId { get; set; }
 
        //  //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
        [Display(Name = "Id Padiglione")]
        [DisplayFormat(NullDisplayText = "Id assente")]
        [ScaffoldColumn(false)]
        public string PadiglioneId { get; set; }
 
        //  //[Required(ErrorMessage = "Il campo Stand è obbligatorio")]
        [DisplayFormat(NullDisplayText = "")]
        public string Stand { get; set; }
 
        public bool FlagSolvenza { get; set; }
 
        public bool FlagEstero { get; set; }
 
 
        //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
        [Display(Name = "Tipologia Anagrafica")]
        //[DisplayFormat(NullDisplayText = "")]
        public virtual TipologiaAnagraficaViewModel TipologiaAnagrafica { get; set; }
 
        //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
        [Display(Name = "Padiglione")]
        //[DisplayFormat(NullDisplayText = "")]
        public virtual PadiglioneViewModel Padiglione { get; set; }
 
 
        /*   TO DO:
         *   - reintrodurre il riferimento virtual alla classe manifestazione? Oppure tenere solo l'id number?
         *   - impostare il viewmodel in modo tale che, per ogni record inserito, possa essere specificata una manifestazione
                                                                                                   */
 
        //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
        //[Display(Name = "Manifestazione")]
        //public virtual PadiglioneViewModel ManifestazioneViewModel { get; set; }
    }
}

ManifestazioneViewModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sopra.Fmspa.BusinessLayer.Models;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Sopra.Fmspa.BusinessLayer.ViewModelsValidators;
 
namespace Sopra.Fmspa.BusinessLayer.ViewModels
{
    [FluentValidation.Attributes.Validator(typeof(ManifestazioneViewModelValidator))]
    public class ManifestazioneViewModel
    {
        //  //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
        [Display(Name = "Id Manifestazione")]
        [DisplayFormat(NullDisplayText = "Id assente")]
        [ScaffoldColumn(false)]
        public string Id { get; set; }
 
        //  //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
        [Display(Name = "Descrizione Manifestazione")]
        [DisplayFormat(NullDisplayText = "")]
        public string Descrizione { get; set; }
 
        [DisplayFormat(DataFormatString = "{0:dd/mm/yyyy}", ApplyFormatInEditMode = true)]
        public System.DateTime DataInizio { get; set; }
 
        [DisplayFormat(DataFormatString = "{0:dd/mm/yyyy}", ApplyFormatInEditMode = true)]
        public System.DateTime DataFine { get; set; }
    }
}

PadiglioneViewModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sopra.Fmspa.BusinessLayer.Models;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Sopra.Fmspa.BusinessLayer.ViewModelsValidators;
 
namespace Sopra.Fmspa.BusinessLayer.ViewModels
{
    [FluentValidation.Attributes.Validator(typeof(PadiglioneViewModelValidator))]
    public class PadiglioneViewModel
    {
        //  //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
        [Display(Name = "Id Padiglione")]
        [DisplayFormat(NullDisplayText = "Id assente")]
        [ScaffoldColumn(false)]
        public string Id { get; set; }
 
        //  //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
        [Display(Name = "Descrizione Padiglione")]
        [DisplayFormat(NullDisplayText = "")]
        public string Descrizione { get; set; }
    }
}

TipologiaAnagraficaViewModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sopra.Fmspa.BusinessLayer.Models;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Sopra.Fmspa.BusinessLayer.ViewModelsValidators;
 
namespace Sopra.Fmspa.BusinessLayer.ViewModels
{
    [FluentValidation.Attributes.Validator(typeof(TipologiaAnagraficaViewModelValidator))]
    public class TipologiaAnagraficaViewModel
    {
        //  //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
        [Display(Name = "Id Tipologia Anagrafica")]
        [DisplayFormat(NullDisplayText = "Id assente")]
        [ScaffoldColumn(false)]
        public string Id { get; set; }
 
        //  //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
        [Display(Name = "Descrizione Tipologia Anagrafica")]
        [DisplayFormat(NullDisplayText = "")]
        public string Descrizione { get; set; }
    }
}

AnagraficaController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;
using Sopra.Fmspa.BusinessLayer.Models;
using Sopra.Fmspa.BusinessLayer.DAL;
using Sopra.Fmspa.BusinessLayer.ViewModels;
using System.Data.Entity.Validation;
using System.Diagnostics;
using AutoMapper.Configuration;
using AutoMapper.Mappers;
 
 
/*   SINTASSI AUTOMAPPER
     AutoMapper.Mapper.CreateMap<Sorgente,Destinatario>();
     Destinatario dest = AutoMapper.Mapper.Map<Sorgente,Destinatario>(sorg);   */
 
 
 
namespace Sopra.Fmspa.BusinessLayer.Controllers
{
 
    public class AnagraficaController : Controller
    {
        ODLModelContainer db = new ODLModelContainer();
        private IAnagraficaRepository anagraficaRepository;
 
 
        //public AnagraficaController()
        //{
        //    this.anagraficaRepository = new AnagraficaRepository(new ODLModelContainer());
 
        //    AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
        //    AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
        //    AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
 
        //    AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
        //    AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
        //    AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
 
 
        //    AutoMapper.Mapper.CreateMap<Anagrafica,AnagraficaViewModel>()
        //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
        //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
        //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
        //    AutoMapper.Mapper.CreateMap<AnagraficaViewModel,Anagrafica>()
        //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
        //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
        //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
        //    //AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaViewModel>();
        //}
 
 
        public AnagraficaController()
        {
            this.anagraficaRepository = new AnagraficaRepository(new ODLModelContainer());
 
            AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
            AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
            //AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
 
            AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
            AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
            //AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
 
 
            AutoMapper.Mapper.CreateMap<AnagraficaInBianco,AnagraficaViewModel>()
                .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
                .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione));
                //.ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
 
            AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaInBianco>()
                .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.Ignore())
                .ForMember(dest => dest.Padiglione, opt => opt.Ignore())
                .ForMember(dest => dest.Manifestazione, opt => opt.Ignore());
 
            //AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaViewModel>();
        }
 
 
        public AnagraficaController(IAnagraficaRepository anagraficaRepository)
        {
            this.anagraficaRepository = anagraficaRepository;
        }
 
 
        public ActionResult Remote_Data()
        {
            return View("AjaxBinding");
        }
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult AnagraficaRistoratoriEspositori()
        {
            IList<AnagraficaViewModel> anagview = anagraficaRepository.GetAnagraficaList();
 
            PopulateTipologiaAnagrafica();
            PopulatePadiglione();
 
            return View(anagview);
        }
 
 
        //public ActionResult AnagraficaRistoratoriEspositori()
        //{
        //    IEnumerable<Anagrafica> anag = anagraficaRepository.GetAnagrafica();
 
        //    PopulateTipologiaAnagrafica();
        //    PopulatePadiglione();
 
        //    return View(anag);
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult Anagrafiche_Read([DataSourceRequest] DataSourceRequest request)
        {
            return Json(anagraficaRepository.GetAnagraficaList().ToDataSourceResult(request));
        }
 
 
        //public ActionResult Anagrafiche_Read([DataSourceRequest] DataSourceRequest request)
        //{
        //    return Json(AnagraficaRepository.All().ToDataSourceResult(request));
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult Anagrafiche_RagioneSocialeFilter()
        {
            return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.RagioneSociale).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
        public ActionResult Anagrafiche_TipologiaAnagraficaFilter()
        {
            return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.TipologiaAnagrafica).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
        public ActionResult Anagrafiche_PadiglioneFilter()
        {
            return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.Padiglione).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
        public ActionResult Anagrafiche_FlagEsteroFilter()
        {
            return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.FlagEstero).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, AnagraficaViewModel anagrafica)
        //{
        //    if (anagrafica != null && ModelState.IsValid)
        //    {
        //        anagraficaRepository.Insert(anagrafica);
        //        anagraficaRepository.Save();
        //    }
        //    return Json(new[] { anagrafica }.ToDataSourceResult(request,ModelState));
        //}
 
 
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, AnagraficaViewModel anagrafica)
        {
            if (anagrafica != null && ModelState.IsValid)
            {
                anagrafica.Id = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().Id + 1;
                anagrafica.TipologiaAnagraficaId = anagrafica.TipologiaAnagrafica.Id;
                anagrafica.PadiglioneId = anagrafica.Padiglione.Id;
 
                // valore forzato
                if (anagrafica.ManifestazioneId == null)
                {
                    //anagrafica.Manifestazione.Id = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().Manifestazione.Id;
                    anagrafica.ManifestazioneId = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().ManifestazioneId;
                }
                //anagrafica.ManifestazioneId = anagrafica.Manifestazione.Id;
 
                anagraficaRepository.Insert(anagrafica);
                anagraficaRepository.Save();
            }
            return Json(new[] { anagrafica }.ToDataSourceResult(request,ModelState));
        }
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    var results = new List<AnagraficaViewModel>();
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            anagraficaRepository.Insert(anag);
        //            results.Add(anag);
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(results.ToDataSourceResult(request, ModelState));
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        private void PopulateTipologiaAnagrafica()
        {
            ViewData["TipologiaAnagrafiche"] = AutoMapper.Mapper.Map<IList<TipologiaAnagrafica>,IList<TipologiaAnagraficaViewModel>>(db.odl_TipologiaAnagrafica.ToList());
        }
 
        private void PopulatePadiglione()
        {
            ViewData["Padiglioni"] = AutoMapper.Mapper.Map<IList<Padiglione>,IList<PadiglioneViewModel>>(db.odl_vw_PADIGLIONI.ToList());
        }
 
 
        public ActionResult GetRagioneSociale()
        {
            return Json(anagraficaRepository.GetAnagraficaList().Select(x => x.RagioneSociale).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
        public ActionResult GetTipologiaAnagrafica()
        {
            return Json(anagraficaRepository.GetAnagraficaList().Select(x => x.TipologiaAnagrafica).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
        public ActionResult GetPadiglione()
        {
            return Json(anagraficaRepository.GetAnagraficaList().Select(x => x.Padiglione).Distinct(), JsonRequestBehavior.AllowGet);
        }
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            anag.TipologiaAnagrafica.Id = anag.TipologiaAnagraficaId;
        //            anag.Padiglione.Id = anag.PadiglioneId;
        //            anag.Manifestazione.Id = anag.ManifestazioneId;
 
        //            anagraficaRepository.Update(anag);
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        {
            if (anagrafiche != null && ModelState.IsValid)
            {
                foreach (var anag in anagrafiche)
                {
                    anag.TipologiaAnagrafica.Id = anag.TipologiaAnagraficaId;
                    anag.Padiglione.Id = anag.PadiglioneId;
                    //anag.Manifestazione.Id = anag.ManifestazioneId;
 
                    anagraficaRepository.Update(anag);
                }
                anagraficaRepository.Save();
            }
            return Json(ModelState.ToDataSourceResult());
        }
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            var target = AnagraficaRepository.One(p => p.Id == anag.Id);
        //            if (target != null)
        //            {
        //                target = AutoMapper.Mapper.Map<AnagraficaViewModel, AnagraficaViewModel>(anag);
        //                anagraficaRepository.Update(target);
        //            }
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche != null && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            var target = AnagraficaRepository.One(p => p.Id == anag.Id);
        //            if (target != null)
        //            {
        //                target.AccountNumber = anag.AccountNumber;
        //                target.RagioneSociale = anag.RagioneSociale;
        //                target.TipologiaAnagraficaId = anag.TipologiaAnagraficaId;
        //                target.Descrizione = anag.Descrizione;
        //                target.ManifestazioneId = anag.ManifestazioneId;
        //                target.PadiglioneId = anag.PadiglioneId;
        //                target.Stand = anag.Stand;
        //                target.FlagSolvenza = anag.FlagSolvenza;
        //                target.FlagEstero = anag.FlagEstero;
 
        //                target.TipologiaAnagrafica = anag.TipologiaAnagrafica;
        //                target.Padiglione = anag.Padiglione;
 
        //                anagraficaRepository.Update(target);
        //            }
        //        }
        //        anagraficaRepository.Save();
        //    }
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
        public ActionResult Anagrafiche_Delete([Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        {
            if (anagrafiche.Any())
            {
                Anagrafiche_Destroy(anagrafiche);
            }
            else
            {
                return HttpNotFound();
            }
 
            return Json(ModelState.ToDataSourceResult());
        }
 
        [HttpPost, ActionName("Anagrafiche_Delete")]
        public void Anagrafiche_Destroy([Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        {
            if (ModelState.IsValid)
            {
                foreach (var anag in anagrafiche)
                {
                    anagraficaRepository.Delete(anag);
                }
            }
            anagraficaRepository.Save();
        }
 
 
        //[AcceptVerbs(HttpVerbs.Post)]
        //public ActionResult Anagrafiche_Destroy([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
        //{
        //    if (anagrafiche.Any() && ModelState.IsValid)
        //    {
        //        foreach (var anag in anagrafiche)
        //        {
        //            anagraficaRepository.Delete(anag);
        //        }
        //    }
        //    anagraficaRepository.Save();
 
        //    return Json(ModelState.ToDataSourceResult());
        //}
 
 
//   ---------------------------------------------------------------------------------------------- //
 
 
    }
 
}
 
 
 
/*   TO DO:
 *   - aggiungere la possibilità di scegliere, per ogni record della grid, una manifestazione
 *   - collegamento tra la pagina manifestazioni e questa pagina (anagrafica in bianco)
                                                                                                                   */
AnagraficaRistoratoriEspositori.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/ViewsMasterPage.Master" %>
 
<asp:Content ID="Content1" ContentPlaceHolderID="phdContent" runat="server">
 
    <h2>Gestione Anagrafica Ristoratori/Organizzatori</h2>
 
 
 
<div>
<%= Html.Kendo().AutoComplete()
          .Name("RagioneSocialeSearch")
          .Filter("startswith")
          .Placeholder("Inserire Ragione Sociale...")
          .DataTextField("RagioneSociale")
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("GetRagioneSociale", "Anagrafica");
              })
              .ServerFiltering(false); //If true the DataSource will not filter the data on the client
          })
          .HtmlAttributes(new { style = "width:250px" })
    %>
 
<%= Html.Kendo().AutoComplete()
          .Name("TipologiaAnagraficaSearch")
          .Filter("startswith")
          .Placeholder("Inserire Tipologia Anagrafica...")
          .DataTextField("Descrizione")
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("GetTipologiaAnagrafica", "Anagrafica");
              })
              .ServerFiltering(false); //If true the DataSource will not filter the data on the client
          })
          .HtmlAttributes(new { style = "width:250px" })
    %>
 
<%= Html.Kendo().AutoComplete()
          .Name("PadiglioneSearch")
          .Filter("startswith")
          .Placeholder("Inserire Padiglione...")
          .DataTextField("Descrizione")
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("GetPadiglione", "Anagrafica");
              })
              .ServerFiltering(false); //If true the DataSource will not filter the data on the client
          })
          .HtmlAttributes(new { style = "width:250px" })
    %>
 
<label>Flag Estero</label><input type = "checkbox" name = "FlagEsteroSearch" id = "FlagEsteroSearch" aria-labelledby = "Flag Estero"/>
 
<input type = "button" name = "Search" id = "Search" contenteditable = "true" aria-labelledby = "Search" value = "Search"/>
</div>
 
 
 
<%: Html.Kendo().Grid<Sopra.Fmspa.BusinessLayer.ViewModels.AnagraficaViewModel>()
    .Name("Grid")
    .HtmlAttributes(new { Style = "height:700px;" })
    .Columns(columns =>
    {
        columns.Bound(e => e.Id).Hidden();
        columns.Bound(e => e.RagioneSociale)
                .Filterable(filterable => filterable.UI("RagioneSocialeFilter"))
                .Width(150);
        columns.Bound(e => e.TipologiaAnagrafica)
                .Filterable(filterable => filterable.UI("TipologiaAnagraficaFilter"))
                .Width(150)
                .ClientTemplate("# try {# #=TipologiaAnagrafica.Descrizione# #} catch (e) {}#");
        columns.Bound(e => e.Padiglione)
                .Filterable(filterable => filterable.UI("PadiglioneFilter"))
                .Width(200)
                .ClientTemplate("# try {# #=Padiglione.Descrizione# #} catch (e) {}#");
        columns.Bound(p => p.Descrizione).Width(200);
        columns.Bound(e => e.FlagEstero)
                .Filterable(filterable => filterable.UI("FlagEsteroFilter"))
                .Width(100);
        //  Batch editing
        //columns.Command(command => command.Destroy()).Width(100);
        //  InLine editing or PopUp editing
        //columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200);
        columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200);
    })
    .Resizable(resizing => resizing.Columns(true))
    .Reorderable(reordering => reordering.Columns(true))
    .Filterable(filterable => filterable
        .Extra(false)
         .Operators(operators => operators
            .ForString(str => str.Clear()
                .StartsWith("Inizia per")
                .IsEqualTo("Equivale a")
                .IsNotEqualTo("Differisce da")
            ))
        )
    //  Batch editing
    //.ToolBar(toolbar =>
    //        {
    //            toolbar.Create();
    //            toolbar.Save();
    //        })
    //  InLine editing
    //.ToolBar(toolbar => toolbar.Create())
    .ToolBar(toolbar => toolbar.Create())
    //  Batch editing
    //.Editable(editable => editable.Mode(GridEditMode.InCell))
    //  InLine editing
    //.Editable(editable => editable.Mode(GridEditMode.InLine))
    //  PopUp editing
    //.Editable(editable => editable.Mode(GridEditMode.PopUp))
    .Editable(editable => editable.Mode(GridEditMode.PopUp))
    .Pageable()
    .Sortable()
    .Scrollable()
    .ColumnMenu()
    .DataSource(dataSource => dataSource
        .Ajax()
        .ServerOperation(true)
        .PageSize(100)
        //.Batch(true)
        .Events(events => events.Error("error_handler"))
        .Model(model =>
            {
                model.Id(p => p.Id);
                model.Field(p => p.FlagEstero).DefaultValue(null);
            })
        .Read("Anagrafiche_Read", "Anagrafica")
        .Update("Anagrafiche_Update", "Anagrafica")
        .Create("Anagrafiche_Create", "Anagrafica")
        .Destroy("Anagrafiche_Delete", "Anagrafica")
    )
%>
 
 
 
<script>
    $("#Search").click(function () {
        $filter = new Array();
 
        $RagioneSociale = $("#RagioneSocialeSearch").val();
        $TipologiaAnagrafica = $("#TipologiaAnagraficaSearch").val();
        $Padiglione = $("PadiglioneSearch").val();
        $FlagEstero = $("#FlagEsteroSearch").is(':checked');
 
        if ($RagioneSociale) {
            $filter.push({ field: "RagioneSociale", operator: "contains", value: $RagioneSociale });
        }
 
        if ($TipologiaAnagrafica) {
            $filter.push({ field: "TipologiaAnagrafica.Descrizione", operator: "contains", value: $TipologiaAnagrafica });
        }
 
        if ($Padiglione) {
            $filter.push({ field: "Padiglione.Descrizione", operator: "contains", value: $Padiglione });
        }
 
        $filter.push({ field: "FlagEstero", operator: "eq", value: $FlagEstero });
 
 
        var Grid = $("#Grid").data("kendoGrid");
        Grid.dataSource.filter({
            logic: "and",
            filters: $filter
        });
 
    });
</script>
 
 
 
<script type="text/javascript">
 
    function error_handler(e) {
        if (e.errors) {
            var message = "Errori:\n";
            $.each(e.errors, function (key, value) {
                if ('errors' in value) {
                    $.each(value.errors, function () {
                        message += this + "\n";
                    });
                }
            });
 
            var grid = $("#Grid").data("kendoGrid");
            grid.one("dataBinding", function (e) {
                e.preventDefault();   // cancel grid rebind if error occurs
            });
 
            alert(message);
        }
    }
 
 
    function RagioneSocialeFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_RagioneSocialeFilter") %>"
                }
            },
            optionLabel: "--Scegliere ragione sociale--"
        });
    }
 
    function TipologiaAnagraficaFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_TipologiaAnagraficaFilter") %>"
                }
            },
            optionLabel: "--Scegliere tipologia anagrafica--"
        });
    }
 
    function PadiglioneFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_PadiglioneFilter") %>"
                }
            },
            optionLabel: "--Scegliere padiglione--"
        });
    }
 
    function FlagEsteroFilter(element) {
        element.kendoDropDownList({
            dataSource: {
                transport: {
                    read: "<%= Url.Action("Anagrafiche_FlagEsteroFilter") %>"
                }
            },
            optionLabel: "--Espositore Estero?--"
        });
    }
 
</script>
 
 
 
</asp:Content>
 
<asp:Content ID="Content2" ContentPlaceHolderID="phdHeadContent" runat="server">
</asp:Content>


PadiglioneViewModel.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
 
<%:Html.Kendo().DropDownList()
        .Name("Padiglione")
        .DataValueField("Id")
        .DataTextField("Descrizione")
        .BindTo((System.Collections.IEnumerable)ViewData["Padiglioni"])
 %>

TipologiaAnagraficaViewModel.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
 
<%:Html.Kendo().DropDownList()
        .Name("TipologiaAnagrafica")
        .DataValueField("Id")
        .DataTextField("Descrizione")
        .BindTo((System.Collections.IEnumerable)ViewData["TipologiaAnagrafiche"])
 %>
AnagraficaViewModel.ascx
<%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl(Of Sopra.Fmspa.BusinessLayer.ViewModels.AnagraficaViewModel)" %>
 
 
 
<div class="editor-label">
    <%: Html.LabelFor(Function(model) model.RagioneSociale) %>
</div>
<div class="editor-field">
    <%: Html.EditorFor(Function(model) model.RagioneSociale) %>
    <%: Html.ValidationMessageFor(Function(model) model.RagioneSociale) %>
</div>
 
 
<div class="editor-label">
    <%: Html.LabelFor(Function(model) model.TipologiaAnagrafica)%>
</div>
<div class="editor-field">
    <%: Html.EditorFor(Function(model) model.TipologiaAnagrafica)%>
    <%: Html.ValidationMessageFor(Function(model) model.TipologiaAnagrafica)%>
</div>
 
<div class="editor-label">
    <%: Html.LabelFor(Function(model) model.Padiglione)%>
</div>
<div class="editor-field">
    <%: Html.EditorFor(Function(model) model.Padiglione)%>
    <%: Html.ValidationMessageFor(Function(model) model.Padiglione)%>
</div>
 
 
<div class="editor-label">
    <%: Html.LabelFor(Function(model) model.Descrizione) %>
</div>
<div class="editor-field">
    <%: Html.EditorFor(Function(model) model.Descrizione) %>
    <%: Html.ValidationMessageFor(Function(model) model.Descrizione) %>
</div>
 
 
<div class="editor-label">
    <%: Html.LabelFor(Function(model) model.FlagEstero) %>
</div>
<div class="editor-field">
    <%: Html.EditorFor(Function(model) model.FlagEstero) %>
    <%: Html.ValidationMessageFor(Function(model) model.FlagEstero) %>
</div>
Tags
Grid
Asked by
Stefano
Top achievements
Rank 1
Answers by
Daniel
Telerik team
Stefano
Top achievements
Rank 1
Share this question
or