【问题标题】:ASP.NET ListView, custom DataSources, and editing itemsASP.NET ListView、自定义数据源和编辑项
【发布时间】:2010-10-09 10:55:35
【问题描述】:

MSDN 演练提供了许多示例,您可以在这些示例中从工具箱中拖动数据源,运行一些简单的配置步骤,然后将ListView 拖动到屏幕上,将其指向数据源,嘿 - 你已经得到完整的表格编辑。

现在我正在尝试编写自己的 DataSource 类(实现 System.Web.UI.IDataSource 的类)和我自己的 DataSourceView 类。我现在将这个自定义 DataSource 类的一个实例分配给 ListView.DataSource 属性。

所有项目的显示都运行良好。但是,更新、插入和删除只是不起作用。我正在覆盖我的 DataSourceView 类中的所有函数,但它们只是没有被调用。

这是一个很大的话题,我将把这个问题集中在一个简单的例子上:

当您按下“编辑”按钮(ItemTemplate 内的按钮,CommandName 为“编辑”时,您期望 ItemTemplateEditItemTemplate 替换。这没有发生。我能让它发生的唯一方法是处理 onitemediting 事件。

protected void _listViewPublicHolidays_ItemEditing(object sender, ListViewEditEventArgs e)
{
    _listViewPublicHolidays.EditIndex = e.NewEditIndex;
    _listViewPublicHolidays.DataBind();
}

这几乎不是问题,但我为什么必须这样做呢?在我将 ListView 附加到 LinqDataSource 的 MSDN 演练中,不必编写此代码。以前来过这里的人可以猜测我的自定义数据源中会有什么不同或缺少什么吗?

【问题讨论】:

    标签: .net asp.net data-binding


    【解决方案1】:

    使用 LinqDataSource 或 ObjectDataSource,绑定、设置 editindex 等通过数据源处理。如果你绑定到你自己的集合或数据集,你需要自己做一些调查。这些数据源类会自动处理维护数据的状态,而列表或数据集等标准集合则不能。

    【讨论】:

      【解决方案2】:

      我知道这是一种替代方法,可能不适用于您的特定情况,但您可能希望考虑将 ObjectDataSource 与简单的对象模型一起使用,它会为您完成一些工作,而不是编写一个整体数据源。

      因此,例如,您可以创建一个相当简单的 PublicHolidays 类,其中包含几个方法

      public List<PublicHoliday> GetAllPublicHolidays()
      

      public void UpdatePublicHoliday(string name, date holidayDate)
      

      等,您可以将 ObjectDataSource 直接指向这些方法。

      【讨论】:

      • 我已经尝试过 ObjectDataSource,但我无法解决的问题是初始化。在此示例中,ObjectDataSource 将在选择之前创建一个 PublicHolidays 类,然后再次将其销毁。如果我想根据页面上控件中的值过滤它怎么办?
      • 在您的 GetAllPublicHolidays() 方法中,您可以包含在运行时填写的参数以过滤结果,或者一些实际的网格控件也可以为您执行过滤...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多