يمكن لـ ObjectDataSource في asp.net2.0 تمكين عناصر التحكم في عرض البيانات مثل GridView لتكون مرتبطة بالعرض والتحرير. كما أنه يدعم الترحيل المدمج والفرز وما إلى ذلك. بعد استخدام ORM، يمكنك أيضًا استخدام ObjectDataSource.
لم يعد الترحيل هنا يأخذ جميع الصفحات من قاعدة البيانات ثم يربطها بشكل انتقائي، ولكنه يأخذ الصفحات الموجودة في قاعدة البيانات مباشرة ثم يربطها. لا يزال الفرق كبيرًا، وقد تحسنت الكفاءة بشكل كبير.
يتم توفير التحرير والإنشاء والفرز مباشرةً بواسطة ObjectDataSource، وليست هناك حاجة لكتابة أي تعليمات برمجية في GridView.
بهذه الطريقة، يمكن أن يحتوي تصميم الكائن على الكثير من المنطق، على الأقل بالنسبة لعمليات قاعدة البيانات، وستبدو واجهة المستخدم بسيطة نسبيًا إذا قمت بتقشيرها وفتحها قليلاً، فسيكون من المفيد زرعها للفوز في المستقبل، أو تحويله إلى SmartClient.
إليك مدونة تتحدث بشكل أفضل http://www.evosoftworks.com/Articles/wormods.aspx .
لقد صادف أنني كنت أستخدم WilsonORM، لذا قمت بإعداد واحد وفقًا لذلك.
الهيكل الأساسي هو مثل هذا:
واجهة المستخدم (GridView وعناصر التحكم الأخرى--التحكم في ObjectDataSource)----〉فئة ObjectDataSource (كائن، كتابة ترحيل صفحات CRUD ومنطق آخر)---〉(ORM ينفذ CRUD)---〉DB
لديه عدة خطوات رئيسية
1: أضف خصائص وأساليب إلى الكائن لإكمال CRUD والترحيل والمنطق الآخر
2: قم بتكوين عناصر تحكم واجهة المستخدم مثل GridView للاتصال بعنصر التحكم ObjectDataSource.
دعونا ننظر إلى أول واحد أولا
1: أضف خصائص وأساليب إلى الكائن لإكمال CRUD والترحيل والمنطق الآخر. يتم إنشاء فئة الكائن بواسطة الأداة بناءً على بنية قاعدة البيانات، كما يتم إنشاء ملف التعيين أيضًا.
أولاً، قم بإضافة سمة تعريف DataObject() إلى الكائن، في مساحة الاسم System.ComponentModel [DataObject()]
وصف المنتج للفئة العامة
{ثانيًا، قم بإضافة أساليب CRUD إلى فئة الكائن هذه.
دعونا نلقي نظرة على طريقة الإدراج أولاً
[DataObjectMethod(DataObjectMethodType.Insert)]
إدراج الفراغ الثابت العام (وصف المنتج وصف المنتج)
{
يحاول
{
Manager.DataManager.StartTracking(productDescription, PrimaryState.Inserted);
Manager.DataManager.PersistChanges(productDescription);
}
قبض (استثناء على سبيل المثال)
{
log.Error(ex);
}
} يجب أن تُسبَق هذه الطريقة بسمة [DataObjectMethod(DataObjectMethodType.Insert)]، للإشارة إلى أن هذه هي طريقة الإدراج؛
هذه الطريقة هي طريقة عامة ثابتة؛
المعلمة هي مثيل للكائن نفسه. هذا أفضل، لأن المنطق سهل الفهم ويعمل بالكامل على الكائن.
تتم أيضًا كتابة باقي طرق الحذف والتحديث بهذه الطريقة.
ثم ألق نظرة على طريقة التحديد، وهي طريقة مميزة جدًا.
اختر الطريقة
1 [DataObjectMethod(DataObjectMethodType.Select)]
2 مجموعة عامة <ProductDescription> استرداد (سلسلة استعلام، int maxRows، int startRowIndex، stringsortClause)
3 {
4 حاول
5 {
6 عدد الصفحات = 0؛
7 إذا (sortClause == null ||sortClause == "")
8sortClause = "تاريخ التعديل";
9 Collection<ProductDescription> cs;
10 cs = RetrievePage(query,sortClause, maxRows, (int)Math.Ceiling((double)startRowIndex / maxRows) + 1, out numPages);
11 _numRecs = ((IObjectPage)cs).TotalCount;
12 عودة CS؛
13}
14 صيد (استثناء على سبيل المثال)
15 {
16 سجل. خطأ (على سبيل المثال)؛
17 إرجاع فارغ؛
18}
19}
20 [DataObjectMethod(DataObjectMethodType.Select)]
21 استرداد مجموعة الكائنات العامة الثابتة (مفتاح السلسلة، قيمة السلسلة)
إثنان وعشرون {
23 إذا (القيمة == فارغة || القيمة == "")
24 إرجاع فارغ؛
25 محاولة
26 {
27 QueryHelper helper = Manager.DataManager.QueryHelper;
28 Key = helper.GetFieldName(typeof(ProductDescription).ToString() + "." + Key);
29 ObjectQuery query = new ObjectQuery(typeof(ProductDescription), String.Format("{0}='{1}'", Key, Value), "");
30 ObjectSet obj = Manager.DataManager.GetObjectSet(query);
31 كائن الإرجاع؛
32}
33 صيد (استثناء على سبيل المثال)
34 {
35 سجل. خطأ (على سبيل المثال)؛
36 إرجاع فارغ؛
37 }
38 }
39
40 عدد صحيح عام من RecCount (استعلام سلسلة، int maxRows، int startRowIndex، stringsortClause)
41 {
42 إرجاع _numRecs;
43}
44
45 مجموعة ثابتة عامة <ProductDescription> RetrievePage (string WhereClause، stringsortClause، int pageSize، int pageIndex، out int pageCount)
46 {
47 ObjectQuery<ProductDescription> query = new ObjectQuery<ProductDescription>(whereClause,sortClause,pageSize,pageIndex);
48 ObjectSet<ProductDescription> pageSet = Manager.DataManager.GetObjectSet<ProductDescription>(query);
49 pageCount = pageSet.PageCount;
50 صفحة إرجاع؛
51 } الطريقة الأولى هي المجموعة العامة<ProductDescription> Retrieve(string query, int maxRows, int startRowIndex, stringsortClause)، وهي طريقة يمكنها تنفيذ الترحيل والفرز المضمنين. تجدر الإشارة إلى أن هذا الرمز _numRecs = ((IObjectPage)cs).TotalCount؛ هنا، بعد الترحيل، يتم إخراج العدد الإجمالي للصفحات على الفور، ويتم استخدام هذا لعرض رقم الصفحة، وفقًا للطريقة العامة int RecCount(. يتم استخدام استعلام السلسلة، int maxRows، int startRowIndex، stringsortClause) لاسترداد عدد السجلات؛ لاحظ أن هاتين الطريقتين يجب أن تتطابقا، وأن المعلمات هي نفسها.
الطريقة الثانية، static public ObjectSet Retrieve(string Key, string Value)، تقوم ببساطة باسترداد سجل. يمكن استخدامها في عرض DetailView/FormView.
على الرغم من أن التعليمات البرمجية تبدو كثيرة، إلا أنها في الواقع منقوشة للغاية، لذا يمكنك استخدام CodeSmith أو تعديل أداة ORMHelper مباشرةً لإنشاءها ديناميكيًا دون كتابة التعليمات البرمجية يدويًا.
باستخدام هذه الطرق الأربع، تكتمل عملية CRUD والترحيل والفرز. لا علاقة لهذا الكائن بواجهة المستخدم، بل بمنطق البيانات فقط.
2: تكوين واجهة المستخدم. وينقسم تكوين واجهة المستخدم أيضًا إلى طبقتين: GridView وعناصر تحكم العرض الأخرى؛
الآن قم بتكوين مصدر بيانات الكائن لعناصر التحكم مثل GridView واتصل مباشرة بالكائن لتنفيذ وظائف مثل العرض والتحرير. في الواقع، يتم تعيين خاصية متصلة بـ ObjectDataSource.
<asp:GridView ID = "gv_data" runat = "server"allowPaging = "True"allowSorting = "True" DataSourceID = "ods_list"
هذا هو تكوين عنصر التحكم ObjectDataSource
ObjectDataSource
1 <asp:ObjectDataSource ID = "ods_list" runat = "الخادم" DataObjectTypeName = "BusinessModel.ProductDescription"
2 حذف Method = "حذف" OldValuesParameterFormatString = "original_ {0}" SelectMethod = "استرداد"
3 TypeName = "BusinessModel.ProductDescription" UpdateMethod = "تحديث" SortParameterName = "sortClause"
4 MaxRowsParameterName = "maxRows" SelectCountMethod = "RecCount" EnablePaging = "صحيح"
5 ConflictDetection = "OverwriteChanges" ConvertNullToDBNull = "خطأ">
6 <حدد المعلمات>
7 <asp: اسم المعلمة = "الاستعلام" النوع = "سلسلة" />
8 <asp: اسم المعلمة = "maxRows" النوع = "Int32" />
9 <asp: اسم المعلمة = "startRowIndex" النوع = "Int32" />
10 <asp: اسم المعلمة = "sortClause" النوع = "سلسلة" />
11 </اختر المعلمات>
12</asp:ObjectDataSource>
ألق نظرة على الخصائص الموجودة بالداخل، وهي المعلمات الخاصة بتكوين طريقة CRUD واسم الطريقة المقابلة. هذا هو بالضبط ما نطبقه في الفصل. على سبيل المثال، تم تكوين طريقة الحذف هنا: حذف Method = "حذف"؛ وهنا هي سمة عدد السجلات المذكورة للتو: SelectCountMethod = "RecCount"؛
كيفية تمرير المعلمات هنا؟ يتم تمرير السمات المتعلقة بالنظام بواسطة النظام، على سبيل المثال، maxRows، وstartRowIndex، وما إلى ذلك؛ ويمكن أيضًا تمريرها عن طريق التعليمات البرمجية: this.ods_list.SelectParameters["query"].DefaultValue = query;
http://dlwang2002.cnblogs .com/archive /2006/06/11/422991.html