الخلايا المحسوبة في GridGroupFooterItem الخاصة بـ Telerik RadGrid
سؤال
أقوم بملء Telerik RadGrid ببيانات من DataTable (System.Data.DataTable
).نظرًا لأنني أدعم تطبيق شخص آخر، فلا يمكنني استخدام أي مصدر بيانات آخر أو عنصر تحكم في العرض.
في شبكتي لدي ثلاثة أعمدة:لنفترض أنها عناصر واجهة مستخدم تم إنتاجها (العمود A)، وعناصر واجهة مستخدم معيبة (العمود B) ونسبة الخطأ (العمود C).يوفر لي استعلام قاعدة البيانات هذه الأشياء ويقوم بالحساب C = B / A.
لدي صف الإجماليات (Telerik GridFooterItem
) في أسفل الشبكة.في العمودين A وB، يقوم Telerik بحساب إجماليات تلك الأعمدة بالنسبة لي.لا يمكننا حساب القيمة الصحيحة لـ "إجمالي" العمود C من العمود C وحده:علينا ملؤها بـ (مجموع B) / (مجموع A).
لقد تمكنت من القيام بذلك عن طريق التعامل مع DataBound
حدث RadGrid وملء الخلايا يدويًا في التذييل.(كان علي أن ألتقط GridFooterItem
في ال ItemCreated
الحدث، ثم ضع القيم فيه في DataBound
الحدث، بعد أن قام تلقائيًا بحساب إجماليات A وB بالنسبة لي.) يبدو هذا أمرًا مبتكرًا للغاية - ربما هناك طريقة أفضل...؟
على أية حال، الشيء المهم هو هذا:
تم تقسيم شبكتي إلى مجموعات لذا أحتاج أيضًا إلى ملء العمود C في GridGroupFooterItem
س.لا يمكنني تشغيل أسلوبي المتسلل في هذه الحالة:أجد خلية التذييل التي أريدها myGridFooterItem["WidgetsProduced"]
, ، لكن لا يمكنني الحصول على خلايا تذييل المجموعة myGridGroupFooterItem["WidgetsProduced"]
- إنه ليس مجرد قاموس.
لقد حاولت استخدام myGridGroupFooterItem.Cells[]
, ولكن هذا TableCellCollection
يحتوي على بضع خلايا أكثر مما كنت أتوقع، لذا فإن الوصول إليها عن طريق فهرس عدد صحيح يبدو أمرًا صعبًا بعض الشيء (خاصة وأن هذا تقرير محدد من قبل المستخدم، لذا قد تكون الأعمدة بأي ترتيب).
لذا:كيف يمكنني ملء هذه الخلايا بحسابي؟
المحلول
يبدو أن حدث DataBound الخاص بك يبدو شيئا
grd_ItemDataBound(object sender,GridItemEventArgs e)
{
//catch the footer element
if(e.Item.ItemType==GridItemType.GroupFooter)
{
(e.Item.FindControl("yourTextBox") as TextBox).Text = your calculated value
}
}
نصائح أخرى
قمت بفحص ما إذا كان مفهرس اسم فريد من نوعه يعمل مع إصدار Q2 2009 و Q3 2009 من Radgrid ل ASP.NET AJAX ويعمل على جهازي. تحقق من الإصدار الخاص بك واسأل المزيد من المساعدة باستخدام منتديات التيليريك إذا لزم الأمر.
ديك.
جرب هذا
في صفحة ASPX:
<telerik:GridBoundColumn Aggregate="Sum" DataField="Price" DataFormatString="{0:C}" EmptyDataText="0" FooterText="Total :" HeaderText="Price" UniqueName="Price"> ...
(أو)
في الرمز وراء الصفحة:
Private Sub RadGrid1_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemDataBound
Dim Item As GridDataItem
Dim value as Double
Select Case (e.Item.ItemType)
Case Telerik.Web.UI.GridItemType.AlternatingItem, Telerik.Web.UI.GridItemType.EditItem,Telerik.Web.UI.GridItemType.Item,Telerik.Web.UI.GridItemType.SelectedItem
Item = e.Item
'------ Calculate Total amount -----------
Item("TotalPayment").Text = CDbl(Item("TotalPayment").Text)
value += CDec(Item("TotalPayment").Text)
Case Telerik.Web.UI.GridItemType.Footer
'------ Display the total amount in Footer ------
Dim footerItem As GridFooterItem = e.Item
If Not RadGrid1.Items.Count = 0 Then footerItem("TotalPayment").Text = "Total :" + value
End Select
End Sub
حسنًا، إذا كنت تستخدم صيغة مخصصة لحساب النتائج بدلاً من المجاميع القياسية مثل المجموع والمتوسط وما إلى ذلك، فربما يتعين عليك الاعتماد على المنطق الخاص بك.يجب أن تكون الخلايا الموجودة في تذييلات المجموعة قابلة للفهرسة باسم فريد - أتذكر أن هذا لم يكن مدعومًا في إصدارات Telerik ASP.NET Grid السابقة ولكن تمت إضافته في الإصدارات الأحدث - Q2 أو Q3 2009.
قضيب