منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : عرض التاريخ الهجري في الكريستال ريبورت
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته 
إخواني لدي متأسف جداً لتكراره ولكن لحاجتي الشديدة اضطريت أن أطرحه وهو أن لدي قاعدة بيانات sql  ويوجد بها حقل للتاريخ وقد عمل تحميل للبيانات في الداتاقريد فيو عملت لها تنسيق تظهر بالهجري لكن المشكلة تقع عندما أنتقل للكريستال ريبورت فإنها تظهر بالميلادي وقد حاولت كثيرا بغير فائدة 
متأسف مرة أخرى لتكراري السؤال وقد قام الأخ إبراهيم أبيو والأخ Muaamar في ذلك الوقت بمحاولة مساعدتي ولكن للأسف لم أستطع حل المشكلة

لكم جزيل الشكر 
دمتم بود
وعليكم السلام ورحمة الله وبركاته
بالنسبة لي الطريقة التي اتعامل معها في كريستال ريبورت ولا تواجهني اي مشاكل هي كالاتي
التقرير يتم انشاؤه على فيجوال بيسك او سي شارب حسب اللغة المستخدمة ويتم جلب البيانات بما فيها التاريخ وغيره وعرضها في الداتا جريد فيو وفي التيكست بوكس
واقوم بانشاء داتاسيت 
عند النقر على زر طباعة يتم تعبئة محتويات التقرير في داتا سيت ومن داتا سيت الى كريستال رييبورت ويظهر التقرير في كريستال ريبورت ضمن التنسيق والتصميم المعد من قبل
ولا تواجهني اي مشاكل
ارجو ان يكون كلامي واضح
مرحباً بالأخ أبو أنس هذه نفس الطريقة التي أستخدمها ولكن دائماً يظهر عندي التاريخ الميلادي (  طبعاً هو المخزن في قاعدة البيانات ويظهر في الداتاقريدفيو التاريخ الهجري حسب الفورمات التي عملتها ) ولكن في الكريستال ريبورت لايظهر إلا التاريخ الميلادي  


        Dim dt1 As New DataTable
        dt1 = DataGridView1.DataSource
        Dim cr1 As New CrystalReport1
        cr1.SetDataSource(dt1)
        Dim r1 As New Form25
        r1.CrystalReportViewer1.Zoom(300%)
        r1.CrystalReportViewer1.ReportSource = cr1
        r1.ShowDialog()

لك جزيل الشكر 
دمت بود



      
دعني اطرح عليك سؤال
في حال فتحت شاشة معينة وتحتوي مثلا على تيكست بوكس فيه قيمة معينة
طبعا هذه القيمة تم جلبها من سيكوال. وفي حال ضغطت على زر طباعة فسيظهر التقرير يحتوي القيمة التي تم جلبها من سيكوال
سؤالي ماذا اذا قمت انت بتغيير القيمة قي ابتيكست بوكس ثم ضغطت على زر طباعة
هل سيظهر التقرير القيمة في تيكست بوكس قبل التغيير ام بعد التغيير
السلام عليكم ورحمة الله وبركاته

هل جربت ارسال التاريخ من الاداة الى التقرير عن طريق ال (Parameter Fields) 
ومن ثم تغيير اعدادات الحقل في (Parameter Fields) الى نوع تاريخ 
ووضع هذا الكود مثل الصورة المرفقة


كود :
Local StringVar str := ToText(CurrentFieldValue );
if IsNumeric(str) then str := ToText(ToNumber(str),0 ); // 0 عدد العلامات العشرية
if IsDate(str) then str := cstr(cdate(str),"yyyy/MM/dd");

Local numberVar  i:=0;
for  i:=0  to 9 do
    str:=Replace(str,totext(i,0) , ChrW (i+1632));
str
السلام عليكم ورحمة الله وبركاته 


الشكر الجزيل لكم لإهتماكم وتفاعلكم 

إخواني يمكن ما قدرت أوضح لكم الفكرة لذا سأعيدها  

أولاً  أنا لا أريد نقل البيانات من تكست بوكس  إنما يوجد عندي عمود في الجدول يحتوي على تاريخ غياب الموظفين بعد ذلك نقلتها إلى الداتاقريدفيو ثم ذهبت بها إلى الكريستال ريبورت ما يحصل هو التالي يتم عرض التاريخ في الداتاقريد فيو بالتاريخ الهجري ولكن عند عرضها في جدول تقرير كريستال ريبورت تظهر ميلادي 



>>> طبعاً أنتم تعرفون أن التاريخ يخزن في sql  بالتاريخ الميلادي ولكن عملت Custom format   (  "yyyy/MM/dd" ) في الداتاقريدفيو لتظهر هجري  وبالفعل تعرض هجري في الدتاقريدفيو ولكن للأسف تظهر ميلادي في الكريستال 



آسف على الإطالة أتعبتكم معي 


لكم جزيل الشكر 

دمتم بود
سبب المشكلة انك تعتقد انك تقوم بتزويد الكريستال ببيانات من الداتا جريد فيو
لا اطلاقا الكود الذي تستخدمه انت يقوم بتزويد الكريستال ببيانات من السيكوال طبعا عن طريق وسيط 
تأمل هذا السطر من الكود الخاص بك
 dt1 = DataGridView1.DataSource
ربما يعتقد البعض معنى هذا االسطر ان الداتا تيبل تساوي محتويات الداتا جريد فيو وهذا خطأ والصحيح انك جعلت الداتا تيبل تساوي  محتويات مصدر البيانات للداتا جريد فيو
فيجب استبدال ذلك بما يلي
نقوم باضاف اعمدة للداتا تيبل ثم نقوم بعمل جملة فور تمر على اسطر الداتا جريد فيو وتضيق القيم للداتا تيبل
اعرف ان كلامي قد يبدو غير واضح ولكن سأقوم بنسخ كود من احد برامجي كي تتضح الفكرة
كود :
     Dim dt As New DataTable
           With dt
               .Columns.Add("id")
               .Columns.Add("BILLNO")
               .Columns.Add("BRANSH_NAME")
               .Columns.Add("CUST_NAME")
               .Columns.Add("PHON")
               .Columns.Add("DAT")
               .Columns.Add("notee")
           End With

           For I As Integer = 0 To DGVSEARSH.Rows.Count - 1
               If DGVSEARSH.Rows(I).Cells(0).Value <> Nothing Then
                   dt.Rows.Add(DGVSEARSH.Rows(I).Cells(0).Value.ToString, DGVSEARSH.Rows(I).Cells(1).Value.ToString, DGVSEARSH.Rows(I).Cells(2).Value.ToString, DGVSEARSH.Rows(I).Cells(3).Value.ToString, DGVSEARSH.Rows(I).Cells(4).Value.ToString, DGVSEARSH.Rows(I).Cells(5).Value.ToString, DGVSEARSH.Rows(I).Cells(6).Value.ToString)
               End If
           Next
           '    '-------------------------------------------------------
           Dim rptDoc As CrystalDecisions.CrystalReports.Engine.ReportDocument
           rptDoc = New Crystal_bill1
           rptDoc.SetDataSource(dt)

           Dim f As New FRM_PRINT
           f.CrystalReportViewer1.ReportSource = rptDoc
           f.ShowDialog()
السلام عليكم ورحمة الله وبركاته 

جزاك الله كل خير وبارك الله وفيك 

سأجرب الكود وأعلمك بما حصل معي 



لك جزيل الشكر 

دمت بود
السلام عليكم ورحمة الله وبركاته الشكر الجزيل لجميع الإخوة تم حل المشكلة 
تحية عطرة لكم جميعاً استعملت الكود الذي أرسله الأخ أبو أنس 

لكم جزيل الشكر 
دمتم بود