PDA

View Full Version : حرفه ای: ارسال مقدار نال به StimulReport



NasimBamdad
پنج شنبه 18 مرداد 1397, 23:43 عصر
سلام و وقت بخیر .

یک گزارش دارم که تعدادی در حدود 200 چک باکس داره . فرم پذیرش یک مرکز درمانی می باشد .

موضوع به این صورت هست که هر checkBox در سمت سی شارپ یک مقدار به خاصیت TAG اش به صورت منحصر به فرد اختصاص داده شده و طبق مراحلی چک باکس های چک خورده در دیتابیس درج می شوند

از طرفی سمت گزارش هم که به صورت متد RegData و یک دیتاتیبل برای هر چک باکس یک ستون در نظر گرفته شده که از نوع bool می باشد .

موضوع و مشکل این هست که کوری که پاس داده میشه به StimulReport ، حاوی مقدار نال خواهد بود . ( چرا که مقادیر تیک خورده در دیتابیس درج شده اند و گاها مقدار نال به گزارش پاس داده میشه) .

اگه مقدار نال نباشه مشکلی نداره گزارش و خوب کار می کنه، اما وقتی مقدار نال داره اررور میده و قبول نمی کنه . چه طوری میشه مقدار Nullable درست کرد سمت گزارش ساز StimulReport


StiReport stiReport1 = new StiReport();
string path = Application.StartupPath + "\\Reports\\Paziresh.mrt";
stiReport1.Load(path);
stiReport1.ResetRenderedState();
dt.TableName = "DataSource1";
stiReport1.Dictionary.Clear();
stiReport1.RegData(dt);
stiReport1.Dictionary.Synchronize();
stiReport1.Show();



حتی در سایت StimulReport هم تاپیک زدم ولی جوابی نیامد .




https://forum.stimulsoft.com/viewtopic.php?f=8&t=56772

Mahmoud.Afrad
جمعه 19 مرداد 1397, 00:39 صبح
متن خطا رو چرا قرار ندادید؟!

احتمال قریب به یقین خطا برای خط زیر هست.
stiReport1.Dictionary.Clear();
اصلا چرا این خط رو اضافه کردید؟ خب این خط منبع داده گزارش را حذف میکنه و باعث خطا میشه.

NasimBamdad
جمعه 19 مرداد 1397, 00:55 صبح
متن خطا رو چرا قرار ندادید؟!

احتمال قریب به یقین خطا برای خط زیر هست.
stiReport1.Dictionary.Clear();
اصلا چرا این خط رو اضافه کردید؟ خب این خط منبع داده گزارش را حذف میکنه و باعث خطا میشه.


با عرض شرمندگی فراموش کردم .

عکس اش رو ضمیمه کردم . خطایی که میداد


و جالبه بدونید در تمام گزارش ها اون stiReport1.Dictionary.Clear(); استفاده می کردم و مشکلی نبوده تا الان . همه گزارش هام . ولی با مقدار نال مشکل داره .


البته الان پاکش کردم و مشکلم حل شد ! اصلا انتظار نداشتم . مممنونم . سایت رسمی استیمول هم نمی دونم چرا ، تاپیک ام رو پاک کرده . بازم دم شما گرم !

NasimBamdad
جمعه 19 مرداد 1397, 01:11 صبح
ببخشید این 2 تا خط چی کار می کنند ؟ الان حذف شان کردم مشکلی نبود و به خوبی گزارش کار کرد



stiReport1.Compile();
stiReport1.Render();

Mahmoud.Afrad
جمعه 19 مرداد 1397, 02:37 صبح
ببخشید این 2 تا خط چی کار می کنند ؟ الان حذف شان کردم مشکلی نبود و به خوبی گزارش کار کرد



stiReport1.Compile();
stiReport1.Render();



زمانی که گزارش را نمایش میدید با فراخوانی متد show ، گزارش کامپایل و به کاربر نمایش داده میشه. متد show دو متد compile , render را در صورت نیاز فراخوانی میکند.
فایلهای mrt از نوع xml هستند. با متد compile کد C#‎‎‎ مناسب از این xml تولید و کامپایل میشه که میتونید خروجی را در فایل(dll) ذخیره کنید که نیازی به کامپایل در زمان اجرا نباشه. یا اینکه به جای استفاده از فایل mrt ، گزارش را به صورت کلاس سی شارپ ذخیره و به پروژه اضافه کنید تا جزئی از برنامه بشه که در اینصورت هم نیازی به کامپایل در زمان اجرا نیست.

وقتی نیازی به نمایش گزارش ندارید و مثلا میخواهید خروجی به pdf بگیرید گزارش را render و بعد export می کنید.

NasimBamdad
جمعه 19 مرداد 1397, 11:31 صبح
زمانی که گزارش را نمایش میدید با فراخوانی متد show ، گزارش کامپایل و به کاربر نمایش داده میشه. متد show دو متد compile , render را در صورت نیاز فراخوانی میکند.
فایلهای mrt از نوع xml هستند. با متد compile کد C#‎‎‎‎ مناسب از این xml تولید و کامپایل میشه که میتونید خروجی را در فایل(dll) ذخیره کنید که نیازی به کامپایل در زمان اجرا نباشه. یا اینکه به جای استفاده از فایل mrt ، گزارش را به صورت کلاس سی شارپ ذخیره و به پروژه اضافه کنید تا جزئی از برنامه بشه که در اینصورت هم نیازی به کامپایل در زمان اجرا نیست.

وقتی نیازی به نمایش گزارش ندارید و مثلا میخواهید خروجی به pdf بگیرید گزارش را render و بعد export می کنید.

خیلی کامل و عالی بود . تا به امروز به اشتباه Compile , Render رو فراخوانی می کردم و بعدش متد Show . در صورتی که خود متد Show این ها رو فرخوانی می کنند . سپاس بسیار .

فقط یک سوالی اگه ما گزارش رو به صورت کلاس C# در بیاریم ( از قابلیت Save AS در خود فایل گزارش) ، چه طوری باید فرخوانیش کرد و گزارش رو نمایش داد ؟


و اگه امکانش هست یه سری به این تاپیک هم بزنید

لیـــــــــنـــــک (http://barnamenevis.org/showthread.php?550451-%DA%A9%D8%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87%DB%8C%D9%86%D9%87-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-200-%DA%86%DA%A9-%D8%A8%D8%A7%DA%A9%D8%B3-%D8%AF%D8%B1-StimulReport&p=2399749#post2399749)

Mahmoud.Afrad
جمعه 19 مرداد 1397, 18:14 عصر
فقط یک سوالی اگه ما گزارش رو به صورت کلاس C#‎ در بیاریم ( از قابلیت Save AS در خود فایل گزارش) ، چه طوری باید فرخوانیش کرد و گزارش رو نمایش داد ؟


یک کلاس هست که از StiReport مشتق شده پس فرقی با قبل نداره(یک نمونه از کلاس میسازید و بعد از ارسال دیتا گزارش را نمایش میدید) نیازی به متد Load هم ندارید.

رامین مرادی
شنبه 20 مرداد 1397, 08:58 صبح
جسارتا یه موضوعی رو بگم. شما یک چک باکس تو برنامتون وجود داره که یا تیک میخوره یا نمیخوره(true یا false) حالا این وسط مقدار نال چیه؟!! برای فیلدتون مقدار پیشفرضش رو False بزارید. تو این گونه موارد بهتره اینارو اعمال کنید. یا 0 یا 1 چیز دیگه ای بین دوحالت منطقی وجود نداره. بعدا هم دردسر نال بودن رو هم ندارید.

NasimBamdad
شنبه 20 مرداد 1397, 10:07 صبح
جسارتا یه موضوعی رو بگم. شما یک چک باکس تو برنامتون وجود داره که یا تیک میخوره یا نمیخوره(true یا false) حالا این وسط مقدار نال چیه؟!! برای فیلدتون مقدار پیشفرضش رو False بزارید. تو این گونه موارد بهتره اینارو اعمال کنید. یا 0 یا 1 چیز دیگه ای بین دوحالت منطقی وجود نداره. بعدا هم دردسر نال بودن رو هم ندارید.

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

درضمن اگه با استیمول کار کرده باشید متوجه میشید که در حالت دیتاسورس dataset/datatable برای چک باکس نمیشه مقدار پیش فرض گذاشت.

و اینکه چک باکس های‌روی فرم فقط اونایی که تیک می خورن‌در دیتابیس درج میشن.پس اونایی که تیک نمی خورن درج نمیشن و مقدار false ندارن. مقدار نال میشه

Helpco
یک شنبه 21 مرداد 1397, 09:48 صبح
زمانی که گزارش را نمایش میدید با فراخوانی متد show ، گزارش کامپایل و به کاربر نمایش داده میشه. متد show دو متد compile , render را در صورت نیاز فراخوانی میکند.
فایلهای mrt از نوع xml هستند. با متد compile کد C#‎‎‎‎ مناسب از این xml تولید و کامپایل میشه که میتونید خروجی را در فایل(dll) ذخیره کنید که نیازی به کامپایل در زمان اجرا نباشه. یا اینکه به جای استفاده از فایل mrt ، گزارش را به صورت کلاس سی شارپ ذخیره و به پروژه اضافه کنید تا جزئی از برنامه بشه که در اینصورت هم نیازی به کامپایل در زمان اجرا نیست.

وقتی نیازی به نمایش گزارش ندارید و مثلا میخواهید خروجی به pdf بگیرید گزارش را render و بعد export می کنید.

سلام ممکن بگید چطوری گزارش به کلاس تبدیل کنیم؟ که نیاز به کامپایل نداشته باشد؟

رامین مرادی
یک شنبه 21 مرداد 1397, 10:05 صبح
سلام ممکن بگید چطوری گزارش به کلاس تبدیل کنیم؟ که نیاز به کامپایل نداشته باشد؟
بعد از انجام ویرایش روی گزارش و هنگام ذخیره میتونید نوع فایل رو بزارید رو حال csharp classes.cs تا یه کلاس بده بهتون

danialafshari
یک شنبه 21 مرداد 1397, 11:29 صبح
دوست عزیز همین کار انجام شده بود ولی با اون خط کد بالا دیتاسورس پاک میشد.

درضمن اگه با استیمول کار کرده باشید متوجه میشید که در حالت دیتاسورس dataset/datatable برای چک باکس نمیشه مقدار پیش فرض گذاشت.

و اینکه چک باکس های‌روی فرم فقط اونایی که تیک می خورن‌در دیتابیس درج میشن.پس اونایی که تیک نمی خورن درج نمیشن و مقدار false ندارن. مقدار نال میشه
با سلام
ابتدا بگم شما میتونید هر چی دلتون بخواد رو بجای مقادیر True و False نمایش بدید
کافیه توی Design Stimul روی فیلد مورد نظر کلیک کنید و از قسمت Properties خصویت Format و سپس Display رو تنظیم کنید

148688


بعدش هم بگم این فرمی که قرار دادید برای کار دستی هست که از بین گزینه ها یکی رو تیک میزنه که به نظرم برای یک نرم افزار کامپیوتری این کاره اشتباهیه چون همه گزینه ها در نرم افزار وجود داره و شما فقط باید گزینه هایی که تیک میخورن رو ثبت کنید و وارد کردن گزینه ها رو هم به عهده کاربر بزارید، اینطور اگر تغییری پیش بیاد نیازی نیست که شما تغییر توی نرم افزار بدید
موفق باشید

NasimBamdad
یک شنبه 21 مرداد 1397, 13:41 عصر
با سلام
ابتدا بگم شما میتونید هر چی دلتون بخواد رو بجای مقادیر True و False نمایش بدید
کافیه توی Design Stimul روی فیلد مورد نظر کلیک کنید و از قسمت Properties خصویت Format و سپس Display رو تنظیم کنید

148688


بعدش هم بگم این فرمی که قرار دادید برای کار دستی هست که از بین گزینه ها یکی رو تیک میزنه که به نظرم برای یک نرم افزار کامپیوتری این کاره اشتباهیه چون همه گزینه ها در نرم افزار وجود داره و شما فقط باید گزینه هایی که تیک میخورن رو ثبت کنید و وارد کردن گزینه ها رو هم به عهده کاربر بزارید، اینطور اگر تغییری پیش بیاد نیازی نیست که شما تغییر توی نرم افزار بدید
موفق باشید



درست می فرمایید فرم طراحی شده واقعا برای سیستم دستی و کاغذی هست و خود بنده خیلی بهشون پیشنهاد دارم برای گزینه های مختلف و ...

اما مرغشان یک پا داره و میگن عین همین درست بشه . بنده سطوح دسترسی متفاوت گذاشتم و فرم های مختلف و جدا سازی های مختلف . آخرش گفتند نمیشه همه اینا به یک فرم تبدیل بشه ؟ دیگه فرم های مختلف باز نکنیم .( بنده قویا مقاومت کرده و راه خودم رو رفتم )