2009-02-23 34 views
2

MSDN演練提供了許多示例,您可以從工具箱中拖動數據源,執行一些簡單的配置步驟,然後將ListView拖動到屏幕上,將其指向DataSource,嘿 - 你有完整的表格編輯。ASP.NET ListView,自定義數據源和編輯項目

現在我正在嘗試編寫自己的DataSource類(實現了System.Web.UI.IDataSource的類)和我自己的DataSourceView類。我現在將這個自定義DataSource類的實例分配給ListView.DataSource propery。

所有項目的顯示效果都很好。但是,更新,插入和刪除只是不起作用。我重寫了我的DataSourceView類中的每個函數,但它們並沒有被調用。

這是這樣一個很大的話題,我將重點介紹這個問題的一個簡單的例子:

當你按下「編輯」按鈕(的ItemTemplate裏面的按鈕,編輯的」一個 CommandName的 」你期望的的ItemTemplate由一個 EditItemTemplate中,這並沒有發生更換。我能得到這樣的情況發生的唯一辦法是處理 onitemediting事件。

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

這不是一個問題,但我該怎麼做呢?在MSDN演練中,我將 ListView附加到 LinqDataSource,此代碼不必寫入。能否有人在這裏冒險猜測我的自定義數據源中會有什麼不同或缺失?

回答

1

我知道這是一種替代方法,可能無法在您的特定情況下工作,但您可能希望查看使用ObjectDataSource的簡單對象模型,它將爲您完成一些工作,而不是編寫一個整個DataSource。

因此,例如,你可以創建一對夫婦方法相當簡單PublicHolidays類

public List<PublicHoliday> GetAllPublicHolidays() 

public void UpdatePublicHoliday(string name, date holidayDate) 

等,你可以直接點ObjectDataSource控件的方法。

+0

我已經嘗試了ObjectDataSource,但是我無法解決的問題是初始化。在這個例子中,ObjectDataSource會在選擇之前創建一個PublicHolidays類,然後再次銷燬它。如果我想根據頁面上某個控件的值來過濾它,該怎麼辦? – 2009-02-24 04:27:58

0

使用LinqDataSource或ObjectDataSource,綁定,設置editindex等是通過數據源處理的。如果你綁定到你自己的集合或數據集,你需要自己做一些管道工。那些數據源類自動處理維護數據的狀態,其中標準集合(如列表或數據集)不會。