تنسيق الأعمدة لASP.Net GridView استنادا إلى نوع البيانات

StackOverflow https://stackoverflow.com/questions/250937

سؤال

ولدي صفحة ASP.Net بسيطة جدا التي تعمل كواجهة أمامية لإجراء مخزن. تشغيله فقط الإجراء ويظهر الناتج باستخدام عنصر تحكم GridView: أقل من 40 أسطر من التعليمات البرمجية الكلي، بما في ذلك العلامات ASPX. الإجراء المخزن نفسه جدا ... متقلبة. انها تستخدم لعدد من الأغراض والتغييرات تنسيق الإخراج بشكل منتظم.

والامر كله يعمل كبيرة، وذلك لأن تحكم GridView لا حقا بحاجة لرعاية ما الأعمدة يعود الإجراء المخزن: انها مجرد يبين لهم على الصفحة، وهذا بالضبط ما أريد

.

ومع ذلك، فإن قاعدة البيانات هذه يتعارض ديها عدد من أعمدة التاريخ والوقت في جميع أنحاء المكان الذي يوجد فيه جزء الوقت ليس حقا important- انها ركزت دائما. ما أود أن تكون قادرة على القيام به هو السيطرة على التنسيق من مجرد أعمدة التاريخ والوقت في gridview، دون معرفة من أي وقت مضى على وجه التحديد التي الأعمدة التي سيكون. أي وقت عمود في نتائج ديه نوع التاريخ والوقت، فقط تنطبق سلسلة تنسيق بالنظر إلى أن وتقليم قبالة عنصر الوقت.

وأنا أعلم أنني يمكن أن تتحول إلى VARCHAR في قاعدة البيانات، ولكن كنت حقا لا تريد أن يكون لجعل المطورين يهتمون التنسيق في الاستعلام وهذا ينتمي في مستوى العرض على أي حال. أي أفكار أخرى؟


وأخيرا حصلت على هذا العمل بطريقة مقبولة (أو على الأقل تحسين) باستخدام هذا الرمز:

Protected Sub OnRowDatabound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim d As DateTime
        For Each cell As TableCell In e.Row.Cells
            If Date.TryParse(cell.Text, d) AndAlso d.TimeOfDay.Ticks = 0 Then
                cell.Text = d.ToShortDateString()
            End If
        Next cell
    End If
End Sub
هل كانت مفيدة؟

المحلول

إذا كنت السيارات توليد الأعمدة التي يبدو وكأنه أنت. الإجراء باستخدام التنسيق شبكات فظيعة.

وأنت بحاجة إلى حلقة من خلال كافة الأعمدة من الشبكة، وربما في حالة ربط بيانات وتطبيق التعبير التنسيق إلى أي عمود تجد هو العمود التاريخ.

إذا لم تكن توليد السيارات وكنت hadcoding الأعمدة في الشبكة الخاصة بك وسوف تعرف أيضا أعمدة alreayd التي هي أعمدة التاريخ ويمكنك تطبيق نفس التعبير التنسيق لهذا العمود. انها شيء من هذا القبيل {0: DDMMYYYY}. لكن سيكون لديك للبحث عنه كما أن على الأرجح ليس صحيحا تماما

وذلك لتلخيص هوك في حالة ربط بيانات. حلقة عن طريق جمع عمود وتأكد مما إذا كان العمود عمود التاريخ. أتساءل كيف يمكن القيام بذلك :). إذا قررت عمود هو العمود تاريخ تعيين التعبير شكله.

وفويلا

و---------------------- تحرير

وطيب كيف عنك أكتب لك طريقة التي تقوم بإرجاع البيانات من بروك لإرجاع DataTable و. يمكنك ربط DataTable وإلى الشبكة الخاصة بك بعد تنسيق البيانات في DataTable. جمع datatable.Columns هو كوكتيلات من DataColumns وهذه تحتوي على خاصية نوع البيانات. يمكنك أن تبحث عن System.DateTime أو التاريخ والوقت، وأنه قد يكون واحدا من خصائص الملكية نوع البيانات نفسها :). وأنا أعلم أنه مرهق ولكن ما كنت طالبا سوف بالتأكيد أن تكون مرهقة. مرة واحدة كنت قد حددت أعمدة التاريخ الذي قد تكون قادرة على فعل شيء معها.

إذا لم يكن فما استقاموا لكم فاستقيموا تبدأ في النظر في القراء البيانات ومعرفة ما إذا كان هناك أي شيء يمكنك القيام به هناك، أو مع محولات البيانات. أتمنى أن أعطيك إجابة صحيحة ولكن أعتقد مع ذلك استطعت أن تفعل ذلك، فإنه لن تكون جميلة. عذرا

نصائح أخرى

وإذا كان استخدام الأعمدة المربوطة صريحة هو الخيار، إضافة إلى DataFormatString boundField بك

<asp:BoundField DataField="Whatever" ... DataFormatString="{0:dd/MM/yyyy}" HtmlEncode="False"/ > 

وإلا فإنك يمكن أن ننظر في القيام تنسيق الحدث GridView.OnRowDataBound

ويمكنك استخدام الدالة IsDate () لمعرفة إذا كان هناك شيء غير تاريخا صالحا ثم استخدام خيارات dateformatting لجعلها تبدو وكأنها تريد.

وفيما يلي بعض الأمثلة للتاريخ في صيغة: http://datawebcontrols.com/faqs/CustomizingAppearance/FormatDateTimeData.shtml

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top