قم بتغيير الصورة ديناميكيًا في تقرير Crystal Report في وقت التشغيل

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

  •  02-07-2019
  •  | 
  •  

سؤال

أنا أستخدم تقارير Crystal المضمنة في VisualStudio 2005.أرغب في تغيير الصورة التي يتم عرضها في التقرير في وقت التشغيل بشكل مثالي عن طريق إنشاء مسار إلى ملف الصورة ثم عرض تلك الصورة في التقرير.

هل تمكن أي شخص من تحقيق ذلك باستخدام هذا الإصدار من Crystal Reports؟

هل كانت مفيدة؟

المحلول

في العمل نقوم بذلك عن طريق دفع الصورة (الصور) إلى التقرير كحقول في جدول البيانات.إنها ليست جميلة، لكنها تنجز المهمة.وبطبيعة الحال، يتطلب هذا الحل أن تقوم بإدخال البيانات في التقارير عبر DataSet.لقد شعرت دائمًا أن هذا كان اختراقًا في أحسن الأحوال.أتمنى حقًا أن تكون معلمات الصورة ممكنة مع CR.

يحرر: تجدر الإشارة إلى أنه إذا كنت تربط تقريرك البلوري بكائنات قديمة عادية، فإنك تريد الكشف عن خاصية البايت[] حتى يتعامل التقرير مع ذلك كصورة.

نصائح أخرى

لقد توصلت أخيرًا إلى حل باستخدام byte[] نصيحة نشرت هنا من قبل جوش.

ينطبق هذا الحل إذا كنت تستخدم كائن C# قديمًا عاديًا لملء تقارير Crystal الخاصة بك (انظر http://www.aspfree.com/c/a/C-Sharp/Crystal-Reports-for-Visual-Studio-2005-in-CSharp/ للحصول على معلومات حول هذا النهج).

في فئة C# الخاصة بك، أدخل الكود التالي:

private static byte[] m_Bitmap = null;

public byte[] Bitmap
{
   get
   {
      FileStream fs = new FileStream(bitmapPath, FileMode.Open);
      BinaryReader br = new BinaryReader(fs);
      int length = (int)br.BaseStream.Length;
      m_Bitmap = new byte[length];
      m_Bitmap = br.ReadBytes(length);
      br.Close();
      fs.Close();
      return m_Bitmap;
   }
}

الآن، قم بتحديث تعيين كائنات C# في السجل التجاري باستخدام خيار "التحقق من قاعدة البيانات".يجب أن تشاهد بعد ذلك Bitmap الخاصية كحقل CR.فقط اسحبه إلى النموذج.سيكون من النوع IblobFieldObject.عند التشغيل، يجب أن ترى صورتك.

لقد طرحت هذا السؤال أيضًا (وصوتت لسؤالك)!

[لقد وجدت منذ ذلك الحين حلاً باستخدام مصفوفة بايت عبر خاصية كائن C# - راجع إجابة منفصلة.ترك هذه الإجابة هنا كمرجع ...]

إليك ما رأيته مقترحًا (لكنني حاولت وفشلت في كل من C#-2005 وC#-2008).

  1. اختر دليلاً وقم بوضع BMP هناك (على سبيل المثال، "C: emp\image.bmp").
  2. من CR-Designer أ) انقر بزر الماوس الأيمن->إدراج->كائن OLE...ب) حدد "إنشاء من ملف" ج) حدد خانة الاختيار "ارتباط" د) تصفح واختر bmp المحدد في الخطوة 1 هـ) انقر فوق "موافق" و) ضع الصورة في النموذج.
  3. قم بالكتابة فوق/تحديث الصورة في وقت التشغيل في كود C# الخاص بك.من الناحية النظرية، منذ أن قمت بإدراج أ وصلة إلى ملف صورة، سيتم تحديثه عند تحديث النموذج.

لم يحالفني الحظ في هذا النهج.تظهر الصورة عندما أقوم بتصميم النموذج لأول مرة (الخطوة 2).ولكن في وقت التشغيل، لا يتم تحديث الصورة بالنسبة لي.من الآن وصاعدا، الأمور تصبح غريبة حقا.يبدو أن CR يقوم بتخزين نوع من الصور مؤقتًا والتي لن تختفي.يمكنني حذف رابط كائن OLE في CR-Designer، لكن إذا قمت بإعادة إنشائه، أحصل دائمًا على صندوق أسود بنفس حجم الصورة الأصلية (حتى لو قمت بتغيير حجم الصورة.bmp).

يمكنك أيضًا استخدام صيغة شرطية لتعيين موقع الصورة.يرى تقارير الكريستال:صور ديناميكية.

حاول استخدام مزيج من استخدام معلمة تحتوي على مسار الصورة والبرنامج التعليمي في هذه الصفحة: http://www.idautomation.com/crystal/streaming_crystal.html

ثم في الخطوة رقم 8، استخدم المعلمة بدلاً من المسار الثابت.

هناك خيار آخر وجدته مفيدًا وهو إدراج الصور التي ترغب في استخدامها.ضع الرسم وفقًا لذلك، ثم انقر بزر الماوس الأيمن فوق الرسم وانتقل إلى تنسيق الرسم > عام.حدد مربع المنع، ثم انقر فوق زر الصيغة، الموضح بالشكل x-2.بمجرد الوصول إلى نافذة الصيغة، ما عليك سوى إضافة التعليمات البرمجية لتحديد ما إذا كان يجب منع الرسم أم لا.

في حالتي، كنت أقوم بإنشاء قالب فاتورة واحد لكيانات متعددة.في نافذة الصيغة، قمت ببساطة بكتابة COMPANY <> 1100 مما يعني أنه في كل مرة يتم فيها تشغيل الفاتورة لشركة أخرى غير 1100، سيتم إلغاء الرسم 1100.

نأمل أن يجعل هذا الحياة أسهل...

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

الإصدار الحالي من Crystal Reports (لـ Visual Studio 2012+) الذي أستخدمه مع Visual Studio 2015 يدعم هذه الوظيفة.اتبع الخطوات التالية:

  1. أدخل صورة في تقريرك.هذا سيكون بمثابة حامل نائب الخاص بك.
  2. انقر بزر الماوس الأيمن فوق صورتك واختر تنسيق الكائنRight Click Image
  3. حدد علامة التبويب صورة واضغط على زر الصيغةPicture Tab
  4. سيتم فتح نافذة الصيغة.أدخل صيغة ستجد صورك كروابط.

    إذا ({@isDonor} = "1") ثم "http://www.ny.org/images/aaf/picture1.jpg" آخر "http://www.ny.org/images/aaf/picture2.jpg" Formula Editorإنتهيت!

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