Проблемы с методами удаления и вставки ObjectDataSource объекта GridView в ASP.NET - PullRequest
1 голос
/ 28 ноября 2011

Я хочу использовать ObjectDataSource с GridView в ASP.NET.Отображение данных в GridView работает.Теперь я добавляю CommandField в GridView, чтобы также включить редактирование данных.Метод обновления работает нормально, но у меня есть проблемы с удалением и вставкой:

  1. Когда я нажимаю ссылку Удалить в GridView, вызывается настроенный метод DeleteMethod, но с неправильным testSystemEndpoint параметр.Вместо бизнес-объекта, который должен быть удален, это пустой экземпляр со всеми полями, равными 'null'.Поэтому настроенный DeleteMethod не может удалить запись.
  2. Когда я нажимаю ссылку Вставить в GridView, ничего не происходит.Сконфигурированный InsertMethod не вызывается.

Мой ObjectDataSource выглядит следующим образом:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
        DataObjectTypeName="[...].TSEndpoint" 
        DeleteMethod="Remove" InsertMethod="Add" 
        OldValuesParameterFormatString="original_{0}" SelectMethod="GetTSEndpoints" 
        TypeName="[...].TSRepository" 
        UpdateMethod="Update"></asp:ObjectDataSource>

Мой BusinessObject Manager - TSRepository.cs:

[DataObject]
public class TSRepository : ITSRepository
{
    private ISessionFactory _sessionFactory;
    private Configuration _configuration;

    public TSRepository()
    {
        _configuration = new Configuration();
        _configuration.Configure();
        _configuration.AddAssembly(typeof(TSEndpoint).Assembly);
        _sessionFactory = _configuration.BuildSessionFactory();
    }

    [DataObjectMethod(DataObjectMethodType.Insert)]
    public void Add(TSEndpoint testSystemEndpoint)
    {
        if (testSystemEndpoint != null)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            using (ITransaction transaction = session.BeginTransaction())
            {
                session.Save(testSystemEndpoint);
                transaction.Commit();
            }
        }
    }

    [DataObjectMethod(DataObjectMethodType.Update)]
    public void Update(TSEndpoint testSystemEndpoint)
    {
        using (ISession session = NHibernateHelper.OpenSession())
        using (ITransaction transaction = session.BeginTransaction())
        {
            session.Update(testSystemEndpoint);
            transaction.Commit();
        }
    }

    [DataObjectMethod(DataObjectMethodType.Delete)]
    public void Remove(TSEndpoint testSystemEndpoint)
    {
        using (ISession session = NHibernateHelper.OpenSession())
        using (ITransaction transaction = session.BeginTransaction())
        {
            session.Delete(testSystemEndpoint);
            transaction.Commit();
        }
    }

    [DataObjectMethod(DataObjectMethodType.Select)]
    public ICollection<TSEndpoint> GetTSEndpoints()
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            var testSystems = session
                .CreateCriteria(typeof(TSEndpoint))                    
                .List<TSEndpoint>();
            return testSystems;
        }
    }
}

Я быБуду очень рад, если кто-нибудь сможет мне помочь с двумя моими проблемами.

Ответы [ 2 ]

4 голосов
/ 06 декабря 2011

В вопросе 1 я потратил немало времени на поиск очень похожей проблемы в своем собственном коде.

Для меня решение было установить для свойства DataKeyNames в виде сетки имя столбца Первичного ключа для моего объекта. Как только я это сделал, все заработало отлично.

0 голосов
/ 07 декабря 2011

Относительно вопроса 2: я до сих пор не знаю, почему не вызывается метод InsertMethod.Но этот обходной путь подходит мне сейчас: я просто создал форму под GridView, чтобы добавить новую запись.

...