在ASP.NET中使用ObjectDataSource資料控制項和GridView操作資料

來源:互聯網
上載者:User

通過前兩次的內容我們已經實現了帶有分頁和排序的顯示資料,那麼我們如何用ObjectDataSource來協助我們實現刪改

還是老辦法我們先實現DAL層和BLL層當中的操作資料的方法

        [DataObjectMethod(DataObjectMethodType.Insert)]        public static void InserUserInfo(UserInfo info)        {            DAL.UserInfoDAL.InsertUserInfo(info);        }        [DataObjectMethod(DataObjectMethodType.Update)]        public static void UpdateUserInfo(UserInfo info)        {            DAL.UserInfoDAL.UpdateUserInfo(info);        }        [DataObjectMethod(DataObjectMethodType.Delete)]        public static void DeleteUserInfo(UserInfo info)        {            DAL.UserInfoDAL.DeleteUserInfo(info);        }

 

這裡我們可以發現我這裡傳遞的都是UserInfo對象了.至於好處嘛,我認為你在賦值的時候通過屬性對其處理安全性更好一些.反正我總覺得比傳一大堆的變數過來要好.所以這裡採用這個方式.

如果你要採用我這種方式那麼就需要注意你的ObjectDataSource中的一個屬性是否正確設定了

這裡我設定為我查詢出的對象UserInfo

這樣你就可以來實現刪除和修改了.有些人就問呀!我沒有像以前那樣設定傳遞的參數啊.^_^

這裡當你設定了ObjectDataSource的DataObjectTypeName,當你執行相關操作的時候ObjectDataSource就會自動產生一個你設定的對象並且將行內的值一一對應的傳入到你的這個對象.然後直接將這個對象傳入到你的BLL中的方法.但是要注意,這裡還是有很多陷阱的

第一個陷阱 由資料衝突引起的問題

在ObjectDataSource中有個屬性↑

這裡屬性來設定如何處理是否新舊值一起處理

MSDN上的描述為:擷取或設定一個值,該值確定是僅將新值傳遞給 Update 方法,還是將舊值和新值都傳遞給 Update 方法。

當這裡使用預設的OverwriteChanges的時候傳遞的值內容為你更改後值.這裡傳遞是我們修改後的對象值.所以預設狀態下你的更新是沒有問題的.

但如果你要處理新舊值的時候就需要設定到CompareAllValues.但是這時你再更新資料的時候就會報錯了.

為什麼會這樣呢?原來當你設定為CompareAllValues的時候他需要給你BLL層傳遞過兩個對象,一個是原來的UserInfo一個是你修改後的Userinfo.

所以你的方法需要改成這樣

        [DataObjectMethod(DataObjectMethodType.Update)]        public static void UpdateUserInfo(UserInfo info,UserInfo original_info)        {            ......        }

這裡發現我們的更新方法多了後面的一個參數叫original_info,這樣才能將我們的修改後的內容正確更新回資料庫,而且這裡的original_這個首碼可以通過修改

來實現.

陷阱二,鍵欄位的問題.

那當我們ConflicDetection使用預設的OverwriteChanges值的時候我們進行刪除操作.發現沒有刪除了我們想要操作的那條記錄.然後通過監視可以發現傳遞到BLL中的UserInfo對象雖不為空白.但是裡面屬性的值都為預設值

那為什麼會出現這個問題呢?我認為是,刪除操作並沒有修改我GridView中的記錄所以在ConflicDetection使用預設的OverwriteChanges值的時候傳遞過的對象裡要是有值只能是修改後的值.所以這裡你要通過id來刪除則只能刪除記錄為0的了.^_^

所以通常來說刪除不了你想要的內容,但是不出錯.

那怎麼辦呢?這裡因為我們使用的是集合所以在編寫GridView的時候少設定了一個屬性,那就是

這裡我們添加上鍵欄位id.再來看看效果

這次發現,雖然這裡沒有吧UserInfo對象完整的傳遞過來.但是我們想要的id值過來了.^_^

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.