نمایش نتایج 1 تا 40 از 1652

نام تاپیک: سوالات مربوط به StimulReport رو در این تاپیک مطرح کنید

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #8
    کاربر تازه وارد آواتار ictboy
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    رشت
    پست
    35

    Thumbs up نقل قول: سوالات مربوط به StimulReport رو در این تاپیک مطرح کنید

    با سلام مجدد
    دوستان عزیز مشکلم رو پیدا کردم و رفع شد. در اینجا یافته های خودمو در فروم های مختلف می زارم شاید به درد کسی بخوره

    سوال: ارسال یک دیتاست (فیلتر شده یا نشده با یک یا چند جدول) دلخواه به گزارش استیمول سافت

    پاسخ:

    روش اول

    یک:

    از داخل محیط طراحی استیمول با خیال راحت به بانک sql کانکت بشین و گزارش دلخواه رو طراحی کنید.
    دو:
    در برنامه تون با هر روشی که دوست دارید داده های بانک رو واکشی کرده و در نهایت داخل یک dataTable یا dataset پر کنید.
    سه:
    برای فراخوانی گزارش طراحی شده و ارسال dataset مورد نظر از این کد استفاده کنید:

    StiReport Rep = new StiReport();
    Rep.Load("Report_M2.mrt");
    Rep.Dictionary.Clear();
    Rep.RegData(ds);
    Rep.Dictionary.Synchronize();
    Rep.Show();



    خوب خط اول که همه میدونید یک نمونه جدید از گزارش رو می سازه و در خط دوم هم گزارشی که قبلا طراحی کرده بودیم رو به نمونه گزارش مون اختصاص میدیم.
    نکته اصلی در خط سوم است که میاد Dictionary رو خالی میکنه. مشابه دستور خط سوم دستور زیر هم وجود داره:

    Rep.Dictionary.Databases.Clear();
    که این دستور میاد دیتابیس های موجود در گزارش ساخته شده رو خالی می کنه و بعد میتونید دیتابیس جدید با دستور زیر بهش اختصاص بدید:

    Rep.Dictionary.Databases.Add(new StiSqlDatabase("Conn", s));

    و دقیقا اشکال کار من هم همین جا بود که با این دو دستور دیتابیس رو خالی می کردم و کانکشن استرینگ دیتابیس خودم رو بهش میدادم و همین باعث می شد دیتاستی که بعد از این دستور به ریپورتم پاس می کردم اعمال نمی شد و کل اطلاعات جدولم رو بهم نشون میداد نه رکورد های که در دیتاستم بود.

    چهارم:
    خط چهارم به بعد هم که توسط دستورات RegData و Synchronize دیتاست خودتون رو به گزارش ارسال می کنید و نمایش می دید. در این روش اگر در گزارشتون از چندین جدول استفاده کرده باشید کافیه اون جداول در دیتاستی که دارین به گزارش ارسال می کنید اضافه کرده باشید و داخل اون موجود باشه.


    روش دوم:

    خوب دراین روش بجای ارسال دیتاست به گزارش، فیلتر ایجاد شده در برنامه رو بصورت متغیر به گزارش ارسال کنید. فرض کنید ما یک جدول داریم با 100 رکورد و با امکانات جستجویی که در فرم برنامه گذاشتیم، کاربر با انتخاب های دلخواه جدول رو فیلتر کرده و الان تعداد رکوردهایی که در datagrid داره می بینه 10 رکورد است. یک راه اینکه مثل روش اول دیتاست فیلتر شده 10 رکوردی رو به گزارش ارسال کنیم و یک راه دیگه اینکه شروط انتخاب شده توسط کاربر رو به گزارش ارسال کنیم. در واقع where ایجاد شده توسط کاربر رو بصورت یک متغیر رشته ای به گزارش ارسال می کنیم. کافیه در زمان طراحی از بخش Variables یک متغیر جدید ایجاد کنید و بعد روی دیتاست تون کلیک راست کرده و edit رو انتخاب کنید و در بخش Query text متغیر که در بخش Variables ایجاد کردید رو به انتهای دستور select اضافه کنید:

    select * from Table1 {variable}

    در حال عادی می تونید محتوای variable رو یک شرط 1=1 بزارید تا بتونید داده های جدول رو ببینید ولی در برنامه تون می تونید مقدار این متغیر رو با where دلخواه خودتون پر کنید. در واقع با این کار عملیات Fill شدن داده از داخل گزارش انجام میشه.


    البته روش های دیگه ای هم هست مثلا میتونید دیتا باند که در داخل ریپورت هست رو با یک فیلد یا شرط مشخص توسط یک پارامتر که از داخل برنامه مقدار دهی شه ، فیلتر کنید.

    امیدوارم نوشته هام مفید بوده باشه.
    آخرین ویرایش به وسیله ictboy : سه شنبه 25 فروردین 1394 در 00:17 صبح دلیل: اصلاح پست فعلی و مشخص شدن راه حل

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •