Datagrid:حساب متوسط أو مجموع العمود في تذييل الصفحة
سؤال
لدي datagrid الحصول على ملزمة dataset, و أريد أن عرض النتيجة في المتوسط في تذييل العمود بالسكان مع الاعداد الصحيحه.
الطريقة أعتقد هناك 2 طرق أفكر:
1."استخدام المصدر, لوك"
في القانون حيث أتصل DataGrid.DataBind(), استخدام DataTable.حساب (طريقة) (أو في حالتي DataSet.DataTable(0).حساب()).على سبيل المثال:
Dim strAverage = DataTable.Compute("Avg(ColumnName)", "")
ولكن بمجرد أن يكون هذا ، كيف يمكنني أن أدخله في تذييل ؟
2."لا بد في المجد"
باستخدام DataGrid.ItemDataBound الحدث ، وحساب ما مجموعه تشغيل من كل ListItemType.البند ListItemType.AlternatingItem ، وأخيرا عرض في ListItemType.تذييل الصفحة.على سبيل المثال:
Select Case e.Item.ItemType
Case ListItemType.Item, ListItemType.AlternatingItem
runningTotal += CInt(e.Item.Cells(2).Text)
Case ListItemType.Footer
e.Item.Cells(2).Text = runningTotal/DataGrid.Items.Count
End Select
هذا خاطئ ، بالإضافة إلى أنني يجب أن تأكد من runningTotal هو إعادة تعيين على كل DataBind.
هل هناك طريقة أفضل ؟
المحلول
أنا لا أعرف إذا كان أي هي بالضرورة أفضل ، ولكن اثنين البديل طرق ليكون:
- يدويا تشغيل من خلال الجدول بمجرد ضرب تذييل حساب من على الشاشة النص
- يدويا استرداد البيانات و لا حساب على حدة من ربط
بالطبع, #2 نوع من إزاحة مزايا ربط البيانات (على افتراض أن ما تفعله).
نصائح أخرى
شكرا DannySmurf, أول إجابة جعلتني أرى معنى.(لماذا ننظر دائما على أن السحر الحل ؟ ).
للإشارة هنا ما انتهى به:(تحذير:VB أدناه ، قد لا تحتوي على ما يكفي من الفاصلة المنقوطة)
Case ListItemType.Footer
e.Item.Cells(0).Text = "Average"
For i As Integer = 3 To 8
Dim runningTotal As Integer = 0
For Each row As DataGridItem In DataGrid.Items
If IsNumeric(row.Cells(i).Text) Then
runningTotal += CInt(row.Cells(i).Text)
End If
Next
e.Item.Cells(i).Text = Math.Round(runningTotal / DataGrid.Items.Count, 0)
Next
End Select
كنت بحاجة إلى القيام بذلك عدة أعمدة (ومن 3 إلى 8) ، في نهاية المطاف لماذا كنت أبحث عن الحل السحري.