none
Actualizar base de datos usando MVC4 y toolkit de Telerik. RRS feed

  • Pregunta

  • Tengo una duda que me esta matando la cabeza basado en una libreria opensource de Telerik he querido implementar una gridview que edita directamente en celda pero no he podido que me actualize la base de datos sobre la que esta basada mi aplicación.

    Exactamente quiero actualizar una tabla llamada materiales; usando el ejemplo en la pagina de telerik se actualiza la aplicacion pero si voy a revizar la base de datos los materiales no son actualizados.

    Este es el codigo que estoy utilizando para la vista:

    @model IEnumerable<constru1.Models.MaterialEditable>
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    
    @{Html.Telerik().Grid(Model)
          .Name("Materiales")
          .DataKeys(keys => keys
              .Add(m => m.codigomaterial)
              .RouteKey("codigomaterial"))
    
          .DataBinding(dataBinding => dataBinding.Ajax()
              .Select("AjaxMateriales", "materialestk")
              .Update("_GuardarEdicionBatch", "materialestk"))
              //.Insert("InsertAjax", "materialestk")
              //.Delete("DeleteAjax", "materialestk"))
    
          .Columns(columns =>
              {
                  columns.Bound(m => m.codigomaterial).Title("Codigo").Width(120);
                  columns.Bound(m => m.descripcion).Title("Descripcion").Width(400);
                  columns.Bound(m => m.unidad).Title("Und").Width(70).HtmlAttributes(new { style = "text-align: center" });
                  columns.Bound(m => m.valorproveedor1).Title("Valor").Format("{0:c}").Width(120).HtmlAttributes(new { style = "text-align: right" });
                  columns.Bound(m => m.codigoproveedor1).Title("Prov.").Width(70).HtmlAttributes(new { style = "text-align: center" });
                  //columns.Bound(m => m.fechadatoproveedor1).Title("Actualizado").Format("{0:d}").Width(160).HtmlAttributes(new { style = "text-align: center" });
    
                  columns.Command(commands =>
                  {
                      commands.Delete().Text("Eliminar");
                  }).Width(100).Title("Acciones");
             })
    
           .ClientEvents(events => events.OnDataBinding("Grid_onDataBinding").OnError("Grid_onError"))
           .Editable(editing => editing.Mode(GridEditMode.InCell))
           .Localizable("es-ES")
           .Pageable(pagerAction => pagerAction.PageSize(3000))
           .Scrollable()
           .Filterable()
           .KeyboardNavigation()
           .Sortable()
           .ToolBar(commands => {
               commands.Insert()
                .ButtonType(GridButtonType.ImageAndText)
                .ImageHtmlAttributes(new { style = "margin-left:0" });
               commands.SubmitChanges();})
    
          .Render();
          }
    }
    

    El controlador para esa vista es:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using constru1.Models;
    using Telerik.Web.Mvc;
    
    namespace constru1.Controllers
    {
        public class materialestkController : Controller
        {
    
            //
            // GET: /materialestk/
    
            //SesionMaterialRepositorio materialRepositorio = new SesionMaterialRepositorio();
    
    
            public ActionResult Index()
            {
                return View(SesionMaterialRepositorio.All());
            }
    
            //[HttpPost]
            [GridAction]
            public ActionResult AjaxMateriales()
            {
                return View(new GridModel(SesionMaterialRepositorio.All()));
            }
    
    
            [HttpPost]
            [GridAction]
            public ActionResult _GuardarEdicionBatch([Bind(Prefix = "inserted")]IEnumerable<MaterialEditable> insertMateriales,
                                                     [Bind(Prefix = "updated")]IEnumerable<MaterialEditable> updatedMateriales,
                                                     [Bind(Prefix = "deleted")]IEnumerable<MaterialEditable> deletedMateriales)
            {
                if (insertMateriales != null)
                {
                    foreach (var material in insertMateriales)
                    {
                        SesionMaterialRepositorio.Insert(material);
                    }
                }
                if (updatedMateriales != null)
                {
                    foreach (var material in updatedMateriales)
                    {
                        var target = SesionMaterialRepositorio.One(m => m.codigomaterial == material.codigomaterial);
                        //var target = materialRepositorio.One(m => m.codigomaterial == material.codigomaterial);
                        if (target != null)
                        {
                            target.codigomaterial = material.codigomaterial;
                            target.descripcion = material.descripcion;
                            target.unidad = material.unidad;
                            target.valorproveedor1 = material.valorproveedor1;
                            target.codigoproveedor1 = material.codigoproveedor1;
                            target.fechadatoproveedor1 = material.fechadatoproveedor1;
                            target.observacionesmaterial = material.observacionesmaterial;
                            target.desperdicio = material.desperdicio;
                            target.grupodemateriales = material.grupodemateriales;
    
                            TryUpdateModel(target);
                            SesionMaterialRepositorio.Update(target);
                            SesionMaterialRepositorio.Save();
    
                        }
                    }
                }
    
                if (deletedMateriales != null)
                {
    
                            foreach (var material in deletedMateriales)
                            {
                                //materialRepositorio.Delete(material);
                            }
                        }
                        return View(new GridModel(SesionMaterialRepositorio.All()));
                    }
            #endregion
    
            /*
            [HttpPost]
            [GridAction]
            public ActionResult UpdateAjax(string codigomaterial)
            {
                try
                {
                    MaterialEditable materialTemp = materialRepositorio.GetMaterial(codigomaterial);
    
                    TryUpdateModel(materialTemp);
                    materialRepositorio.Update(materialTemp, codigomaterial);
                    materialRepositorio.Save();
                }
                catch (Exception ex)
                {
                    throw new ApplicationException(ex.Message);
                }
    
                return View(new GridModel(materialRepositorio.All()));
    
            }
    
            [HttpPost]
            [GridAction]
            public ActionResult InsertAjax()
            {
                MaterialEditable material = new MaterialEditable();
    
                if (material != null)
                {
                    if (TryUpdateModel(material))
                    {
                        materialRepositorio.Insert(material);
                    }
                }
    
                materialRepositorio.Save();
    
                return View(new GridModel(materialRepositorio.All()));
            }
    
            [HttpPost]
            [GridAction]
            public ActionResult DeleteAjax(string codigo)
            {
                MaterialEditable material = materialRepositorio.GetMaterial(codigo);
    
                materialRepositorio.Delete(material);
                materialRepositorio.Save();
    
                return View(new GridModel(materialRepositorio.All()));
            }
            */
        }
    }
    

    El repositorio que he tratado de implementar es:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using constru1.Models;
    
    namespace constru1.Models
    {
        public static class SesionMaterialRepositorio// : ISesionMaterialRepositorio
        {
            static construpreciosEntities _db = new construpreciosEntities();
    
            /*private static construpreciosEntities _db;
    
            public SesionMaterialRepositorio()
            {
                _db = new construpreciosEntities();
            }*/
    
            public static IList<MaterialEditable> All()
            {
    
                IList<MaterialEditable> allMateriales = (IList<MaterialEditable>)HttpContext.Current.Session["Materiales"];
                if (allMateriales == null)
                {
                    HttpContext.Current.Session["Materiales"] = allMateriales =
    
                   (from material in _db.materialeses
                    select new MaterialEditable
                    {
                        codigomaterial = material.codigomaterial,
                        descripcion = material.descripcion,
                        unidad = material.unidad,
                        valorproveedor1 = material.valorproveedor1.HasValue ? material.valorproveedor1.Value : default(decimal),
                        codigoproveedor1 = material.codigoproveedor1,
                        //fechadatoproveedor1 = material.fechadatoproveedor1.HasValue ? material.fechadatoproveedor1.Value : default(DateTime),
                        observacionesmaterial = material.observacionesmaterial,
                        desperdicio = material.desperdicio.HasValue ? material.desperdicio.Value : default(bool),
                        grupodemateriales = material.grupodemateriales
                    }).ToList();
                }
                return allMateriales;
    
            }
    
            public static MaterialEditable One(Func<MaterialEditable, bool> predicate)
            {
                return All().Where(predicate).FirstOrDefault();
            }
    
            /*public MaterialEditable GetMaterial(string codigomaterial)
            {
                var mate = (
                    from d in _db.materialeses
                    where d.codigomaterial == codigomaterial
                    select new MaterialEditable
                    {
                        codigomaterial = d.codigomaterial,
                        descripcion = d.descripcion,
                        unidad = d.unidad,
                        valorproveedor1 = d.valorproveedor1.HasValue ? d.valorproveedor1.Value : default(decimal),
                        codigoproveedor1 = d.codigoproveedor1,
                        observacionesmaterial = d.observacionesmaterial,
                        desperdicio = d.desperdicio.HasValue ? d.desperdicio.Value : default(bool),
                        grupodemateriales = d.grupodemateriales
                    }).FirstOrDefault<MaterialEditable>();
                return mate;
            }*/
    
            /*public materiales Row(string codigo)
            {
                return _db.materialeses.SingleOrDefault(d => d.codigomaterial == codigo);
            }*/
    
            public static void Update(MaterialEditable material)
            {
                MaterialEditable target = One (m => m.codigomaterial == material.codigomaterial);
                if (target != null)
                {
                    target.descripcion = material.descripcion;
                    target.unidad = material.unidad;
                    target.valorproveedor1 = material.valorproveedor1;
                    target.codigoproveedor1 = material.codigoproveedor1;
                    //target.fechadatoproveedor1 = material.fechadatoproveedor1;
                    target.observacionesmaterial = material.observacionesmaterial;
                    target.desperdicio = material.desperdicio;
                    target.grupodemateriales = material.grupodemateriales;
                }
            }
    
            /*
            public void Update(MaterialEditable materialTemp, string codigomaterial)
            {
                materiales mat = Row(codigomaterial);
                mat.descripcion = materialTemp.descripcion;
                mat.unidad = materialTemp.unidad;
                mat.valorproveedor1 = materialTemp.valorproveedor1;
                mat.codigoproveedor1 = materialTemp.codigoproveedor1;
                mat.observacionesmaterial = materialTemp.observacionesmaterial;
                mat.desperdicio = materialTemp.desperdicio;
                mat.grupodemateriales = materialTemp.grupodemateriales;
            }
            */
    
            public static void Insert(MaterialEditable material)
            {
                material.codigomaterial = All().OrderByDescending(m => m.codigomaterial).First().codigomaterial + 1;
                All().Insert(0, material);
                //db.SaveChanges();
    
                /*
                Models.materiales materialDB = new Models.materiales();
    
                materialDB.codigomaterial = material.codigomaterial;
                materialDB.unidad = material.unidad;
                materialDB.valorproveedor1 = material.valorproveedor1;
                materialDB.codigoproveedor1 = material.codigoproveedor1;
                //target.fechadatoproveedor1 = material.fechadatoproveedor1;
                materialDB.observacionesmaterial = material.observacionesmaterial;
                materialDB.desperdicio = material.desperdicio;
                materialDB.grupodemateriales = material.grupodemateriales;
    
                _db.materialeses.AddObject(materialDB);*/
                //_db.SaveChanges();
    
            }
    
            /*public void Delete(MaterialEditable material)
            {
                materiales mater = Row(material.codigomaterial);
            }*/
    
            public static void Save()
            {
                _db.SaveChanges();
            }
    
            public static void Delete(MaterialEditable material)
            {
                MaterialEditable target = One(m => m.codigomaterial == material.codigomaterial);
                if (target != null)
                {
                    All().Remove(target);
                }
                //db.SaveChanges();
            }
        }
    }
    

    Como ven tengo MUCHO codigo en comentario esto por todos los intentos que he hecho para actualizar la base de datos pero como ven se me nota lo novato.

    [b]Alguien me podria dar una mano u orientación?[/b]

    martes, 14 de mayo de 2013 14:11