أضف الحقل الإجمالي إلى DataGrid في ASP.NET
الكاتب:Eve Cole
وقت التحديث:2009-06-30 15:40:15
أحد الأسئلة الأكثر شيوعًا في المنتدى هو: "كيف يمكنني عرض إجماليات الأعمدة في DataGrid؟". لقد قمت شخصيا بتقديم نموذج التعليمات البرمجية لهذا السؤال عدة مرات، لذلك أردت تقديم مثل هذا الدليل في العنوان DotNetJunkies. ستتعلم في هذا الدليل كيفية حساب قيم العمود في DataGrid برمجيًا وعرض القيمة الإجمالية في تذييل DataGrid. تتضمن الأمثلة القابلة للتنزيل في هذا الدليل كلاً من التعليمات البرمجية C# وVisual Basic.NET.
ستبدو النتيجة النهائية لهذا الدليل كما يلي:
كما يتبين من الصورة أعلاه:
إن DataGrid الموجود في صورة الشاشة المستخدمة أعلاه هو DataGrid نموذجي جدًا. هناك العديد من الخصائص التي تتحكم في مظهر DataGrid، والتي تستخدم عمودين BoundColumns لمعالجة البيانات، ولكن هذا ليس الأكثر أهمية. الشيء المهم حقًا للقيام بذلك جيدًا هو استخدام الحدث DataGrid.OnItemDataBound. سيتم تشغيل هذا الحدث في كل مرة يرتبط فيها السجل بـ DataGrid. يمكنك إنشاء معالج حدث لهذا الحدث لمعالجة سجل البيانات. في هذه الحالة، سوف تحصل على القيمة الإجمالية لعمود السعر في وقت التشغيل.
يشير التذييل إلى الصف الأخير من نطاق البيانات. عندما يتم تأهيل هذا الصف، يمكنك الحصول على إحصائيات وقت التشغيل لعمود السعر أثناء معالجة الحدث.
تطبيق :
دعونا أولاً نجد طريقة للتعامل مع مخرجات نماذج الويب. في هذا البرنامج التعليمي، ستستخدم نموذج ويب (calcTotals.aspx) وملف رمز الفصل (calcTotals.aspx.cs). الهدف من هذا الدليل هو أنه سيتم تجميع كود الفصل باستخدام مترجم Just-In-Time. إليك رمز calcTotals.aspx:
<%@ Page Inherits="myApp.calcTotals" Src="20010731T0101.aspx.cs" %>
|
إنشاء أعمدة تلقائية = "خطأ" تباعد الخلايا = "4" تباعد الخلايا = "0" BorderStyle = "صلب" عرض الحدود = "1" خطوط الشبكة = "لا شيء" لون الحدود = "أسود" ItemStyle-Font-Name = "فيردانا" ItemStyle-Font-Size = "9pt" HeaderStyle-Font-Name = "فيردانا" HeaderStyle-Font-Size = "10pt" HeaderStyle-Font-Bold = "صحيح" HeaderStyle-ForeColor = "أبيض" HeaderStyle-BackColor = "أزرق" FooterStyle-Font-Name = "فيردانا" FooterStyle-Font-Size = "10pt" FooterStyle-Font-Bold = "صحيح" FooterStyle-ForeColor = "أبيض" FooterStyle-BackColor="الأزرق" OnItemDataBound = "MyDataGrid_ItemDataBound" شوفووتر = "صحيح">
|
ItemStyle-HorizontalAlign = "يمين" HeaderStyle-HorizontalAlign = "المركز" />
|
في نماذج الويب، يمكنك استخدام @Page للإعلان مباشرةً عن رمز الفئة الذي ترثه الصفحة. تشير سمة SRC إلى أنه سيتم تجميع رمز الفئة باستخدام برنامج التحويل البرمجي JIT. يتم استخدام معظم إعلانات نمط التعليمات البرمجية في نماذج الويب لجعل DataGrid يبدو أفضل.
إحدى الخصائص الأخيرة المحددة هي خاصية OnItemDataBound. سيتم تشغيل هذا الحدث عند حدوث الحدث OnItemDataBound.
تحتوي DataGrid (MyGrid) في نموذج الويب على عمودين منضمين، أحدهما هو العنوان والآخر هو السعر. سيتم هنا عرض عمودي العنوان والسعر لجدول العناوين في قاعدة بيانات Pubs (SQL Server).
تجاهل تعريفات التعليمات البرمجية
سيتم استخدام رمز الفصل في كل مكان. في رمز الفصل، يمكنك تشغيل حدثين: حدث Page_Load وحدث MyGrid_OnItemDataBound. هناك أيضًا طريقة خاصة CalcTotal، والتي يمكن استخدامها ببساطة لإجراء عمليات رياضية على إحصائيات وقت التشغيل.
بداية الكتلة الهيكلية الأساسية لرمز الفصل:
باستخدام النظام؛ باستخدام System.Web؛ باستخدام System.Web.UI؛ باستخدام System.Web.UI.WebControls؛ باستخدام System.Web.UI.HtmlControls؛ باستخدام System.Data؛ باستخدام System.Data.SqlClient؛
مساحة الاسم myApp { إجماليات حساب الفئة العامة: الصفحة { محمية DataGrid MyGrid؛ إجمالي التشغيل المزدوج الخاص = 0؛ } } |
في البنية الأساسية لرمز الفصل، يجب عليك استخدام العبارات ذات الصلة لاستيراد مساحة الاسم (مساحة الاسم). في إعلان الفئة، تقوم بتعريف متغيرين، أحدهما هو المتغير الذي يعين عنصر تحكم DataGrid (MyGrid) لنموذج الويب في رمز الفئة؛ والآخر هو قيمة الدقة المزدوجة المستخدمة لتشغيل إحصائيات وقت التشغيل في عمود السعر في DataGrid .
حدث تحميل الصفحة
في حدث Page_Load، كل ما عليك فعله هو الاتصال بـ SQL Server وتنفيذ أمر SqlCommand بسيط. لقد حصلت على جميع بيانات الملكية والسعر بقيمة السعر > 0. يمكنك استخدام الأسلوب SqlCommand.ExecuteReader لإرجاع SqlDataReader وربطه مباشرةً بـ DataGrid (MyGrid).
Page_Load باطلة محمية (مرسل الكائن، EventArgs e) { SqlConnection myConnection = new SqlConnection("server=Localhost;database=pubs;uid=sa;pwd=;");// إنشاء اتصال SQL SqlCommand myCommand = new SqlCommand("حدد العنوان، السعر من العناوين حيث السعر> 0"، myConnection );//إنشاء أمر SQL
يحاول { myConnection.Open();// افتح اتصال قاعدة البيانات MyGrid.DataSource = myCommand.ExecuteReader();// حدد مصدر بيانات DataGrid MyGrid.DataBind();// ربط البيانات بـ DataGrid myConnection.Close();// أغلق اتصال البيانات} قبض (استثناء على سبيل المثال) { // اكتشف الخطأ HttpContext.Current.Response.Write(ex.ToString()); } } |
طريقة حساب الإجماليات
يتم استخدام أسلوب CalcTotals للتعامل مع المتغير RunningTotal. سيتم تمرير هذه القيمة كسلسلة. تحتاج إلى تحليله على أنه مزدوج، ثم يصبح المتغير RunningTotal مزدوجًا.
باطلة خاصة CalcTotal (سلسلة _price) { يحاول { RunningTotal += Double.Parse(_price); } يمسك { // خطأ في الصيد } } |
حدث MyGrid_ItemDataBound
يتم استدعاء الحدث MyGrid_ItemDataBound عندما يرتبط كل صف في مصدر البيانات بـ DataGrid. في معالج الأحداث هذا، يمكنك معالجة كل صف من البيانات. لأغراضك هنا، ستحتاج إلى استدعاء الأسلوب CalcTotals وتمرير النص من عمود السعر وتنسيق عمود السعر لكل صف بمبلغ وعرض قيمة RunningTotal في صف التذييل.
الفراغ العام MyDataGrid_ItemDataBound (مرسل الكائن، DataGridItemEventArgs e) { إذا (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { CalcTotal(e.Item.Cells[1].Text); e.Item.Cells[1].Text = string.Format("{0:c}"، Convert.ToDouble(e.Item.Cells[1].Text)); } وإلا إذا (e.Item.ItemType == ListItemType.Footer ) { e.Item.Cells[0].Text="Total"; e.Item.Cells[1].Text = string.Format("{0:c}"، RunningTotal)؛ } } |
في معالج الأحداث MyGrid_ItemDataBound، عليك أولاً استخدام ListItemType لتحديد ما إذا كان DataGridItem الحالي عبارة عن عنصر بيانات أو صف AlternatingItem. بالنسبة لعناصر البيانات، يمكنك استدعاء CalcTotals وتمرير قيمة عمود السعر كمعلمة، ثم تقوم بتنسيق عمود السعر وتلوينه بتنسيق المبلغ.
إذا كان DataGridItem عبارة عن تذييل، فيمكن عرض RunningTotal بتنسيق المبلغ.
تلخيص
في هذا الدليل، تعلمت كيفية استخدام الحدث DataGrid.OnItemDataBound لإجراء إحصائيات وقت التشغيل على عمود DataGrid. باستخدام هذا الحدث، يمكنك إنشاء إجمالي عمود وتلوين تذييل صف DataGrid.