الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحريك العناصر داخل تقارير الكريستال ريبورت

بدأه محمد فؤاد تركي في 3 ديسمبر 2011 · 7 رد · 1,281 مشاهدة · في تصميم وبرمجة التقارير
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السادة الزملاء

السلام عليكم ورحمة الله وبركاتة

عندي تقرير مصمم بالكريستال ريبورت وبداخلة عناصر كثيرة مثل Text box و Lables وفي أوقات كثيرة أحتاج لتحريك هذه العناصر في عدة اتجاهات حسب الطلب

أعلي أو أسفل أو يمين أو يسار

لذلك بلاً من أقوم بعمل هذا كل مرة في نمط التصميم أريد ان اقوم بتحريك هذه العناصر في Run Time عن طريق زر في الفورم يقوم بالتحكم في تحريك Objects locations داخل Crystal Reports

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#2

السلام عليكم ..

  1. تقوم الفيجوال استديو بتحويل الريبورت إلى صف عادي ... و يمكن رؤية الصف من خلال فتح الملف CrystalReport1.cs المتولد آليا من الملف CrystalReport1.rpt بشرط تفعيل الخيار show all files في اعلى نافذة الـ Solution Explorer و فتح إشارة الزائد جانب ملف التقرير .
  2. كل العناصر في التقرير ترث من الصف ReportObject و يمكن عمل Casting لها للنوع المناسب مثل LineObject .
  3. العناصر الموجودة في قسم من التقرير توجد في مصفوفة و يمكن الوصول إليها كمايلي :
    public partial class Form1 : Form
    	{
        	CrystalReport1 rpt;
        	public Form1()
        	{
            	InitializeComponent();
        	}
    
        	private void btnPrint_Click(object sender, EventArgs e)
        	{
            	rpt = new CrystalReport1();
            	List<Employee> employeeList = new List<Employee>();
            	employeeList.Add(new Employee() { ID = 1, Name = "E1" });
            	employeeList.Add(new Employee() { ID = 2, Name = "E2" });
            	rpt.SetDataSource(employeeList);
            	crystalReportViewer1.ReportSource = rpt;
        	}
    
        	private void btnMove_Click(object sender, EventArgs e)
        	{
            	foreach (ReportObject reportObject in rpt.Section3.ReportObjects)
            	{
                	reportObject.Left += 100;
                	//reportObject.Name
                	reportObject.Top += 100;
                	reportObject.Width += 20;
    
            	}
    
            	crystalReportViewer1.ReportSource = rpt;
    
        	}
    	}

  4. يمكن الوصول للعناصر بالاسم بدلا من الدليل index مثال:
    ReportObject reportObject = rpt.ReportDefinition.ReportObjects["Line1"];

  5. لا أعرف ما القرق بين المصفوفتين :rpt.ReportDefinition.ReportObjects و rpt.Section3.ReportObjects باعتقادي أن الأولى تحوي كل عناصر في التقرير اما الثانية فتحوي العناصر في القسم المحدد.
  6. السطر الأخير crystalReportViewer1.ReportSource = rpt; مهم حتى تظهر التعديلات على مستعرض التقرير .

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 3 ديسمبر 2011 في 15:24

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

اكرمك الله

#4

بارك الله فيك أخي الكريم

لكن ان امكن المساعدة في بعض المشاكل التي ظهرت لي أثناء التنفيذ

مرفق مثال

post-46243-000129600 1322975586_thumb.jp

Moving Objects.rar

المرفقات
04-12-2011 7-05-28 AM.jpg

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 4 ديسمبر 2011 في 08:15

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#5

السلام عليكم ..

بارك الله بكم أخوي KARIMSOFT و محمد فؤاد تركي .

  1. معك الحق ... الصف Employee هو صف عادي لتجريب التقرير فيه حقلين ID و Name .
  2. و بالنسبة لــ ReportObject فالمفروص نستخدم using CrystalDecisions.CrystalReports.Engine;
  3. المثال بالمرفقات .

ArbTeamReportMoveObjects.rar

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#6

أخي

وضعت بالفعل هذا السطر عندي لكن مازالت المشكلة قائمة والمثال المرفق يوجد به نفس المشكلة

using CrystalDecisions.CrystalReports.Engine;

post-46243-004001900 1322989546_thumb.jp

المرفقات
1.jpg

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#7

لتلافي المشكلة عدلت هذا السطر كالتالي

 foreach (CrystalDecisions.CrystalReports.Engine.ReportObject ReportObject in rpt.Section3.ReportObjects)

وعند تشغيل المشروع ظهر هذا الخطأ

post-46243-080138400 1322990181_thumb.jp

مرفق المشروع

ArbTeamReportMoveObjects_2.rar

المرفقات
2.jpg

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 4 ديسمبر 2011 في 12:18

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#8

السلام عليكم ...

  1. هذه المشكلة مطروحة بكثرة في المنتديات و البعض يقول أنها تعطي خطأ و الآخر يقول انها تعمل ..
  2. السيد Keith Thomson الذي يدعي انه من الــ Business Objects يقول إن هذا Bug سيتم إصلاحه رابط (ثاني مشاركة).
  3. بالتجريب وجدت مايلي :
    1. يمكن تحريك الخط الأفقي لليمين و اليسار عن طريق تغيير الخاصيتين Left و Right .. أما تغيير إحداهما فقط فيؤدي إلى ضغط أو تمدد الخط .
    2. يمكن تحريك الخط العمودي للأعلى و الأسفل عن طريق تغيير الخاصيتين Top و Bottom و تغيير إحداهما فقط يؤدي إلى ضغط أو تمدد الخط.
    3. لا يمكن تغيير عرض الخط من الخاصية width بل نستخدم الخاصية LineThickness .
    4. يمكن تغيير الخصائص Left و Top و width للحقول المسحوبة FieldObject:
    5. الكود التالي يعمل حيث أن Line1 هو الخط العمودي و Line2 هو الخط الأفقي :

      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Data;
      using System.Drawing;
      using System.Linq;
      using System.Text;
      using System.Windows.Forms;
      using CrystalDecisions.CrystalReports.Engine;


      namespace ArbTeamReportMoveObjects
      {
      public partial class Form1 : Form
      {
      CrystalReport1 rpt;
      public Form1()
      {
      InitializeComponent();
      }

      private void btnPrint_Click(object sender, EventArgs e)
      {
      rpt = new CrystalReport1();
      List<Employee> employeeList = new List<Employee>();
      employeeList.Add(new Employee() { ID = 1, Name = "E1" });
      employeeList.Add(new Employee() { ID = 2, Name = "E2" });
      rpt.SetDataSource(employeeList);
      crystalReportViewer1.ReportSource = rpt;
      }

      private void btnMove_Click(object sender, EventArgs e)
      {
      //line1 is vertical
      // line2 is horizontal.
      LineObject line1Object = (LineObject)rpt.ReportDefinition.ReportObjects["Line1"];
      line1Object.Top += 10;
      line1Object.Bottom += 10;
      //line1Object.LineThickness += 10;


      LineObject line2Object = (LineObject)rpt.ReportDefinition.ReportObjects["Line2"];
      line2Object.Left += 10;
      line2Object.Right += 10;

      //line2Object.LineThickness += 10;

      foreach (CrystalDecisions.CrystalReports.Engine.ReportObject reportObject in rpt.Section3.ReportObjects)
      {
      if ((reportObject is FieldObject))
      {
      reportObject.Left += 100;
      //reportObject.Name
      reportObject.Top += 100;
      reportObject.Width += 20;
      }

      }

      crystalReportViewer1.ReportSource = rpt;

      }
      }
      }
      using System;
    6. Line1 و Line2 و الحقول متواجدة في قسم الــ Details و بالتالي تتكرر بحسب السجلات في مصدر بيانات التقرير و هي تتحرك كأنها كتلة واحدة .. فلا تستطيع تحريك الخط Line1 من أجل أول عنصر , بل سيتحرك من أجل كل العناصر ..

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 4 ديسمبر 2011 في 17:27

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

مواضيع مشابهة