Telerik MVC Grid Пакетное редактирование - PullRequest
0 голосов
/ 16 сентября 2011

Почему мои изменения не сохраняются в БД после нажатия кнопки «Сохранить».

Хранилище продукта:

public class ProductRepository
{
    NorthwindDataContext context = new NorthwindDataContext();

    public IList<EditableProduct> All()
    {
        return (from product in context.Products
                select new EditableProduct { 
                    ProductID = product.ProductID,
                    ProductName = product.ProductName,
                    UnitPrice = product.UnitPrice.HasValue ? product.UnitPrice.Value : default(decimal),
                    UnitsInStock = product.UnitsInStock.HasValue ? product.UnitsInStock.Value : default(int),
                    Discontinued = product.Discontinued,
                    LastSupply = DateTime.Today
                }).ToList();
    }

    public EditableProduct One(Func<EditableProduct, bool> predicate)
    {
        return All().Where(predicate).FirstOrDefault();
    }

    public void Update(EditableProduct product)
    {
        EditableProduct target = One(p => p.ProductID == product.ProductID);

        if (target != null)
        {
            target.ProductName = product.ProductName;
            target.UnitPrice = product.UnitPrice;
            target.UnitsInStock = product.UnitsInStock;
            target.Discontinued = product.Discontinued;
            target.LastSupply = product.LastSupply;
        }
    }

    public void Insert(EditableProduct product)
    {
        product.ProductID = All().OrderByDescending(p => p.ProductID).First().ProductID + 1;
        All().Insert(0, product);
    }

    public void Delete(EditableProduct product)
    {
        EditableProduct target = One(p => p.ProductID == product.ProductID);
        if (target != null)
        {
            All().Remove(target);
        }
    }
}

Контроллер:

public partial class GridController : Controller
{
    ProductRepository productRepository = new ProductRepository();

    public ActionResult EditingBatch()
    {
        return View();
    }

    [HttpPost]
    [GridAction]
    public ActionResult _SelectBatchEditing()
    {
        return View(new GridModel(productRepository.All()));
    }

    [HttpPost]
    [GridAction]
    public ActionResult _SaveBatchEditing([Bind(Prefix = "inserted")]IEnumerable<EditableProduct> insertProducts,
        [Bind(Prefix = "updated")]IEnumerable<EditableProduct> updatedProducts,
        [Bind(Prefix = "deleted")]IEnumerable<EditableProduct> deletedProducts)
    {
        if (insertProducts != null)
        {
            foreach (var product in insertProducts)
            {
                productRepository.Insert(product);
            }
        }
        if (updatedProducts != null)
        {
            foreach (var product in updatedProducts)
            {
                var target = productRepository.One(p => p.ProductID == product.ProductID);
                if (target != null)
                {
                    target.ProductName = product.ProductName;
                    target.UnitPrice = product.UnitPrice;
                    target.UnitsInStock = product.UnitsInStock;
                    target.LastSupply = product.LastSupply;
                    target.Discontinued = product.Discontinued;

                    productRepository.Update(target);
                }
            }
        }
        if (deletedProducts != null)
        {
            foreach (var product in deletedProducts)
            {
                productRepository.Delete(product);
            }
        }
        return View(new GridModel(productRepository.All()));
    }
}

1 Ответ

0 голосов
/ 19 сентября 2011

Вы, похоже, используете код из нашего примера приложения, который действительно не обновляет базу данных. Он просто обновляет данные в памяти, поэтому каждый пользователь, просматривающий демонстрации, видит только свои изменения.

Чтобы это работало, вам нужно обновить базу данных. Фактическая реализация зависит от структуры, которую вы используете для доступа к данным. Например, для Linq To SQL вы должны использовать метод SubmitChanges. Вы можете проверить этот проект библиотеки кодов, который обновляет базовую базу данных.

...