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

problem with create and edit methods of the grid

1 Answer 106 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Stefano
Top achievements
Rank 1
Stefano asked on 14 Feb 2013, 07:43 AM
Hi, I have a problem with a kendo grid, in particular with the create method.
Let's suppose that we use that method for inserting a new data (which doesn't exist in the table). All works without problems.
Now let's suppose that we use the create method again to insert a second new data, different from the first one and compatible with the validation rules set in the application.
The problem is that I can't insert that data, because the validation rules prevent me to do that. Looking at the code in debug mode, I saw that I am passing to the create method a list of objects that contains the data I inserted before and the new element: it is so obvious that the validation rules, checking the first data, prevent me to insert new objects in the table. The same problem presents if I use the create method and then the update method.
I noticed, also, that if I refresh the web page before inserting the second data this problem doesn't occur: all works well.

Please, can you help me? I thought that I can proceed in two ways:
- by passing to the create method only the last inserted data
- by manually refreshing the grid everytime a new data is inserted or updated. How can I do this?

You can find the create and update methods in the controller, if you want.


THIS IS MY CODE

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

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)
                                                                                                                   */

1 Answer, 1 is accepted

Sort by
0
Stefano
Top achievements
Rank 1
answered on 14 Feb 2013, 02:19 PM

Hi again, I've already resolved the problem: I changed the create method, so now it takes in input only the new data to insert.

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 { getset; }
 
        public string AccountNumber { getset; }
 
        //[Required(ErrorMessage = "Il campo Ragione Sociale è obbligatorio")]
        [Display(Name = "Ragione Sociale")]
        //[DisplayFormat(NullDisplayText = "")]
        public string RagioneSociale { getset; }
 
        //  //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
        [Display(Name = "Id Tipologia Anagrafica")]
        [DisplayFormat(NullDisplayText = "Id assente")]
        [ScaffoldColumn(false)]
        public string TipologiaAnagraficaId { getset; }
 
        //  //[Required(ErrorMessage = "Il campo Descrizione è obbligatorio")]
        [DisplayFormat(NullDisplayText = "")]
        public string Descrizione { getset; }
 
        //  //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
        [Display(Name = "Id Manifestazione")]
        [DisplayFormat(NullDisplayText = "Id assente")]
        [ScaffoldColumn(false)]
        public string ManifestazioneId { getset; }
 
        //  //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
        [Display(Name = "Id Padiglione")]
        [DisplayFormat(NullDisplayText = "Id assente")]
        [ScaffoldColumn(false)]
        public string PadiglioneId { getset; }
 
        //  //[Required(ErrorMessage = "Il campo Stand è obbligatorio")]
        [DisplayFormat(NullDisplayText = "")]
        public string Stand { getset; }
 
        public bool FlagSolvenza { getset; }
 
        public bool FlagEstero { getset; }
 
 
        //[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 { getset; }
 
 
        /*   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 { getset; }
 
        //  //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
        [Display(Name = "Descrizione Manifestazione")]
        [DisplayFormat(NullDisplayText = "")]
        public string Descrizione { getset; }
 
        [DisplayFormat(DataFormatString = "{0:dd/mm/yyyy}", ApplyFormatInEditMode = true)]
        public System.DateTime DataInizio { getset; }
 
        [DisplayFormat(DataFormatString = "{0:dd/mm/yyyy}", ApplyFormatInEditMode = true)]
        public System.DateTime DataFine { getset; }
    }
}

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 { getset; }
 
        //  //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
        [Display(Name = "Descrizione Padiglione")]
        [DisplayFormat(NullDisplayText = "")]
        public string Descrizione { getset; }
    }
}

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 { getset; }
 
        //  //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
        [Display(Name = "Descrizione Tipologia Anagrafica")]
        [DisplayFormat(NullDisplayText = "")]
        public string Descrizione { getset; }
    }
}

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(newODLModelContainer());
 
            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)
        {
            returnJson(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
Stefano
Top achievements
Rank 1
Share this question
or