ObjectDataSource di asp.net2.0 dapat mengaktifkan kontrol tampilan data seperti GridView untuk diikat untuk ditampilkan dan diedit. Ini juga mendukung paging, pengurutan, dll. Setelah menggunakan ORM, Anda juga bisa menggunakan ObjectDataSource.
Paging di sini tidak lagi mengeluarkan semua halaman dari database lalu mengikatnya secara selektif, tetapi langsung mengeluarkan halaman-halaman di database lalu mengikatnya. Perbedaannya masih besar, dan efisiensinya meningkat pesat.
Pengeditan, pembuatan, dan pengurutan semuanya disediakan langsung oleh ObjectDataSource, dan tidak perlu menulis kode apa pun di GridView.
Dengan cara ini, desain Objek dapat berisi banyak logika, setidaknya untuk operasi database, dan UI akan tampak relatif sederhana. Jika Anda mengupasnya dan membukanya sedikit, akan lebih bermanfaat jika ditransplantasikan untuk menang di masa depan, atau menjadikannya SmartClient.
Berikut adalah blog yang berbicara lebih baik http://www.evosoftworks.com/Articles/wormods.aspx .
Saya kebetulan menggunakan WilsonORM, jadi saya membuatnya sesuai.
Struktur dasarnya seperti ini:
UI (GridView dan kontrol lainnya--Kontrol ObjectDataSource)----〉Kelas ObjectDataSource (Objek, tulis halaman CRUD dan logika lainnya)---〉(ORM mengimplementasikan CRUD)---〉DB
memiliki beberapa langkah utama
1: Tambahkan properti dan metode ke Object untuk menyelesaikan CRUD, paging, dan logika lainnya
2: Konfigurasikan kontrol UI seperti GridView untuk menyambung ke kontrol ObjectDataSource.
Mari kita lihat yang pertama dulu
1: Tambahkan properti dan metode ke Object untuk menyelesaikan CRUD, paging, dan logika lainnya. Kelas Object dihasilkan oleh alat berdasarkan struktur DB, dan file Pemetaan juga dibuat.
Pertama, tambahkan atribut identifikasi DataObject() ke Objek, di namespace System.ComponentModel [DataObject()]
Deskripsi Produk kelas publik
{Kedua, tambahkan metode CRUD ke kelas objek ini.
Mari kita lihat metode Sisipkan terlebih dahulu
[DataObjectMethod(DataObjectMethodType.Insert)]
Sisipkan kekosongan statis publik (Deskripsi Produk Deskripsi Produk)
{
mencoba
{
Manajer.DataManager.StartTracking(productDescription, InitialState.Inserted);
Manajer.DataManager.PersistChanges(Deskripsi Produk);
}
menangkap (Pengecualian ex)
{
log.Error(ex);
}
} Metode ini harus diawali dengan atribut [DataObjectMethod(DataObjectMethodType.Insert)], yang menunjukkan bahwa ini adalah metode Sisipkan;
Metode ini adalah metode publik statis;
Parameternya adalah turunan dari Objek itu sendiri. Ini lebih baik, karena logikanya mudah dimengerti dan semuanya beroperasi pada Object.
Metode Hapus dan Perbarui lainnya juga ditulis dengan cara ini.
Kemudian lihat metode Select yang cukup istimewa.
Pilih metode
1 [DataObjectMethod(DataObjectMethodType.Select)]
2 Koleksi publik<ProductDescription> Ambil(kueri string, int maxRows, int startRowIndex, string sortClause)
3 {
4 mencoba
5 {
6 int jumlah Halaman = 0;
7 jika (sortClause == null || sortClause == "")
8 sortClause = "ModifiedDate Desc";
9 Koleksi<Deskripsi Produk> cs;
10 cs = RetrievePage(query, sortClause, maxRows, (int)Math.Ceiling((double)startRowIndex / maxRows) + 1, keluar numPages);
11 _numRecs = ((IObjectPage)cs).TotalCount;
12 pengembalian cs;
13}
14 tangkapan (Pengecualian ex)
15 {
16 log.Kesalahan(mis);
17 mengembalikan nol;
18}
19}
20 [DataObjectMethod(DataObjectMethodType.Select)]
21 Pengambilan ObjectSet publik statis (Kunci string, Nilai string)
dua puluh dua {
23 if (Nilai == null || Nilai == "")
24 mengembalikan nol;
25 mencoba
26 {
27 Pembantu QueryHelper = Manajer.DataManager.QueryHelper;
28 Kunci = helper.GetFieldName(typeof(ProductDescription).ToString() + "." + Kunci);
29 Kueri ObjectQuery = new ObjectQuery(typeof(ProductDescription), String.Format("{0}='{1}'", Kunci, Nilai), "");
30 ObjectSet obj = Manajer.DataManager.GetObjectSet(kueri);
31 objek pengembalian;
32}
33 tangkapan (Pengecualian ex)
34 {
35 log.Kesalahan(mis);
36 mengembalikan nol;
37 }
38 }
39
40 public int RecCount(kueri string, int maxRows, int startRowIndex, string sortClause)
41 {
42 kembalikan _numRecs;
43}
44
45 Koleksi statis publik<ProductDescription> RetrievePage(string WhereClause, string sortClause, int pageSize, int pageIndex, out int pageCount)
46 {
47 ObjectQuery<ProductDescription> kueri = ObjectQuery baru<ProductDescription>(whereClause, sortClause, pageSize, pageIndex);
48 ObjectSet<ProductDescription> pageSet = Manager.DataManager.GetObjectSet<ProductDescription>(kueri);
49 Jumlah halaman = pageSet.PageCount;
50 halaman kembaliSet;
51 } Metode pertama adalah public Collection<ProductDescription> Retrieve(string query, int maxRows, int startRowIndex, string sortClause), yang merupakan metode yang dapat mengimplementasikan paging dan pengurutan bawaan. Perlu dicatat bahwa kode ini _numRecs = ((IObjectPage)cs).TotalCount; Di sini, setelah paging, jumlah halaman segera dikeluarkan. Ini digunakan untuk menampilkan nomor halaman, metode public int RecCount( string query, int maxRows, int startRowIndex, string sortClause) digunakan untuk mengambil jumlah record; perhatikan bahwa kedua metode ini harus sesuai, dan parameternya sama.
Metode kedua, Pengambilan ObjectSet publik statis (Kunci string, Nilai string), cukup mengambil catatan. Dapat digunakan dalam tampilan DetailView/FormView.
Meskipun kodenya terlihat banyak, namun sebenarnya sangat berpola, sehingga Anda dapat menggunakan CodeSmith atau langsung memodifikasi alat ORMHelper untuk menghasilkannya secara dinamis tanpa menulis kode secara manual.
Dengan keempat metode ini, CRUD, paging, dan pengurutan selesai. Objek tersebut tidak ada hubungannya dengan UI, tetapi hanya logika data.
2: konfigurasi UI. Konfigurasi UI juga dibagi menjadi dua lapisan: GridView dan kontrol tampilan lainnya;
Sekarang konfigurasikan sumber data Objek untuk kontrol seperti GridView dan sambungkan langsung ke Objek untuk mengimplementasikan fungsi seperti tampilan dan pengeditan. Faktanya, ini untuk menyetel properti yang terhubung ke ObjectDataSource.
<asp:GridView ID="gv_data" runat="server" AllowPaging="Benar" AllowSorting="Benar" DataSourceID="ods_list"
Ini adalah konfigurasi kontrol ObjectDataSource
Sumber Data Objek
1<asp:ObjectDataSource ID="ods_list" runat="server" DataObjectTypeName="BusinessModel.ProductDescription"
2 DeleteMethod="Hapus" OldValuesParameterFormatString="original_{0}" SelectMethod="Ambil"
3 TypeName="BusinessModel.ProductDescription" UpdateMethod="Update" SortParameterName="sortClause"
4 MaksimumRowsParameterName="maxRows" SelectCountMethod="RecCount" EnablePaging="true"
5 ConflictDetection="OverwriteChanges" ConvertNullToDBNull="false">
6 <PilihParameter>
7 <asp:Nama Parameter="query" Type="String" />
8 <asp:Nama Parameter="maxRows" Type="Int32" />
9 <asp:Nama Parameter="startRowIndex" Type="Int32" />
10 <asp:Nama Parameter="sortClause" Type="String" />
11 </PilihParameter>
12</asp:ObjectDataSource>
Lihatlah properti di dalamnya, yang merupakan parameter untuk mengkonfigurasi metode CRUD dan nama metode yang sesuai. Inilah yang kami terapkan di kelas. Misalnya, metode Delete dikonfigurasi di sini: DeleteMethod="Delete"; dan berikut adalah atribut dari jumlah record yang baru saja disebutkan: SelectCountMethod="RecCount"; dan pengurutan dan seterusnya.
Bagaimana cara meneruskan parameter di sini? Atribut terkait sistem diteruskan oleh sistem, misalnya maxRows, startRowIndex, dll.; atribut tersebut juga dapat diteruskan dengan kode: this.ods_list.SelectParameters["query"].DefaultValue = query