【发布时间】:2011-11-28 18:57:35
【问题描述】:
我想在 ASP.NET 中使用带有 GridView 的 ObjectDataSource。在 GridView 中显示数据有效。现在,我将 CommandField 添加到 GridView 以启用编辑数据。更新方法工作正常,但我在删除和插入时遇到问题:
- 当我单击 GridView 中的 Delete 链接时,会调用配置的 DeleteMethod,但使用了错误的 testSystemEndpoint 参数。它不是应该删除的业务对象,而是一个所有字段都为“空”的裸实例。因此配置的 DeleteMethod 无法删除该条目。
- 当我单击 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;
}
}
}
如果有人能帮助我解决我的两个问题,我会非常高兴。
【问题讨论】:
标签: asp.net gridview objectdatasource