PDA

View Full Version : حرفه ای: کد نویسی بهینه ارسال پارامتر برای 200 چک باکس در StimulReport



NasimBamdad
جمعه 19 مرداد 1397, 11:29 صبح
درود و وقت بخیر

یک فرم در نرم افزار دارم که حاوی حدود 200 چک باکس هست که در تب های مختلفی گنجانده شده است. رویدادی نوشته شده که به وسیله اون هر چک باکسی که تیک بخوره Tag منحصر به فردی که بهش اختصاص داده شده رو میگیره و در دیتابیس درج می کنه . و این رویداد برای تمامی چک باکس ها در رویداد CheckChanged فرخوانی شده است .

یک رکورد به ازای هر CheckBox تیک خورده حاوی مقدار Tag اش در دیتابیس درج می شود . مثل تصویر زیر

http://82.102.11.2/chec.jpg

حالا باید گزارشی طراحی بشه در سمت StimulReport و این 200 چک باکس در گزارش طراحی بشوند و چون ما فقط Tag های مربوط به CheckBox ها را در دیتابیس ذخیره کرده ایم می بایست با گزارش ارتباط بر قرار کرد و چک باکس های متناظر بر اساس TAG ها در صورت موجود تیک بخورند و در گزارش نمایش داده شوند .


به نظر شما بهترین روش کد نویسی در این زمینه چی هست و البته کار راحت تر و بهینه .

در ضمن اگر پیشنهادی مبنی بر تغییر نحوه ذخیره شدن چک باکس ها در دیتابیس از سمت C# به نظر می رسد با کمال میل استقبال می شود .

Mahmoud.Afrad
جمعه 19 مرداد 1397, 18:33 عصر
در گزارش یک دیتاسورس که یکی از ستونهاش bool هست نیاز دارید.

جهت ثبت مقادیر ، یک جدول در دیتابیس نیاز دارید که معادل متنی همه تگ ها را مشخص کنه(جدول تگ). کلید این جدول به عنوان کلیدخارجی در جدول معاینه قرار میگیره(همان ستون tags)

برای دریافت داده ها از دیتابیس ، در سلکت یک join بین جدول تگ و جدول معاینه نیاز دارید. یک ستون نوع bit هم در سلکت اضافه میکنید که هم نام ستون bool در گزارش باشه.

NasimBamdad
جمعه 19 مرداد 1397, 19:28 عصر
در گزارش یک دیتاسورس که یکی از ستونهاش bool هست نیاز دارید.

جهت ثبت مقادیر ، یک جدول در دیتابیس نیاز دارید که معادل متنی همه تگ ها را مشخص کنه(جدول تگ). کلید این جدول به عنوان کلیدخارجی در جدول معاینه قرار میگیره(همان ستون tags)

برای دریافت داده ها از دیتابیس ، در سلکت یک join بین جدول تگ و جدول معاینه نیاز دارید. یک ستون نوع bit هم در سلکت اضافه میکنید که هم نام ستون bool در گزارش باشه.

خوب بسیار عالی و کاملا بهینه .

سوال من این هست که 200 تا چک باکس رو توی گزارش باید قرار بدم . تک به تک .طبق طراحی که در فرم ارائه شده به بنده هست ؟ جواب این سوالم بله هست ؟

ایـــــن لــــینــــک (http://82.102.11.2/ch2.jpg)

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

Mahmoud.Afrad
جمعه 19 مرداد 1397, 22:22 عصر
KhId آیدی پزشک هست یا مراجعه کننده؟

سربرگ شامل تاریخ، آیدی پزشک و آیدی مراجعه کننده در جدول مجزا و جزئیات باید در جدول دیگری باشه.
میشه یک جدول برای تعریف ارگانهای بدن. یک جدول برای گروه تگها و ... تعریف کرد. اگر میتونی یک اسکریپت از دیتابیس پیام خصوصی کن تا ببینم چطور طراحی کردی.

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

ado.net یا ef استفاده میکنید؟

NasimBamdad
جمعه 19 مرداد 1397, 23:59 عصر
KhId آیدی پزشک هست یا مراجعه کننده؟

سربرگ شامل تاریخ، آیدی پزشک و آیدی مراجعه کننده در جدول مجزا و جزئیات باید در جدول دیگری باشه.
میشه یک جدول برای تعریف ارگانهای بدن. یک جدول برای گروه تگها و ... تعریف کرد. اگر میتونی یک اسکریپت از دیتابیس پیام خصوصی کن تا ببینم چطور طراحی کردی.

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

ado.net یا ef استفاده میکنید؟

khID مربوط به مراجعه کننده است . در واقع خدمتی که برای یک بیمار درج میشه . بیمار یکبار در سیستم ثبت میشه و البته در دفعات بعدی خدمت براش درج میشه این khID در واقع آی دی یونیک خدمت اش است .



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


بله در جداول دیگری اینا رو دارم و می تونم ازش استفاده کنم


از Ado.net استفاده می کنم .

NasimBamdad
شنبه 20 مرداد 1397, 00:19 صبح
مشکل من با کوری ها سمت C# اش نیست . موضوع من سمت گزارشش هست .

اینطور که من فهمیدم معادل این 200 تا چک باکس رو باید روی فرم گزارش طراحی کنم . این درسته ؟ الان همین قسمت اش مانده

Mahmoud.Afrad
شنبه 20 مرداد 1397, 19:56 عصر
مشکل من با کوری ها سمت C#‎‎‎‎‎‎‎‎‎‎ اش نیست . موضوع من سمت گزارشش هست .

اینطور که من فهمیدم معادل این 200 تا چک باکس رو باید روی فرم گزارش طراحی کنم . این درسته ؟ الان همین قسمت اش مانده

فرض کنید قرار باشه کاربر یک چکباکس جدید ایجاد کنه. راه منطقیش به نظر من اصلا نباید تک تک ایجاد کنید، وقتی دیتاسورس دارید میتونید از کامپوننتهای خود استیمول استفاده کنید.
نمونه زیر رو با کامپوننت cross-tab ایجاد کردم. البته به ازای هر تگ یک سطر ایجاد میکنه.
http://s9.picofile.com/file/8334194292/Capture.PNG

NasimBamdad
شنبه 20 مرداد 1397, 23:57 عصر
فرض کنید قرار باشه کاربر یک چکباکس جدید ایجاد کنه. راه منطقیش به نظر من اصلا نباید تک تک ایجاد کنید، وقتی دیتاسورس دارید میتونید از کامپوننتهای خود استیمول استفاده کنید.
نمونه زیر رو با کامپوننت cross-tab ایجاد کردم. البته به ازای هر تگ یک سطر ایجاد میکنه.
http://s9.picofile.com/file/8334194292/Capture.PNG


ممنونم . لطف می کنید . خیلی نظر عالی بود . میشه زحمت بکشید فایل گزارش بدید ؟

و اینکه جناب افزاد عزیز گزارش بنده باید عینا و دقیق مثل لینک زیر بشه

http://82.102.11.2/ch2.jpg

که اینطور کامپوننتی فکر نکنم وجود داشته باشه توی StimulReport چرا که از وزارت خانه دستور هست که شکل فرم به این صورت باشه

Mahmoud.Afrad
یک شنبه 21 مرداد 1397, 00:50 صبح
...
و اینکه جناب افزاد عزیز گزارش بنده باید عینا و دقیق مثل لینک زیر بشه


مظورت از عینا چیه؟ همه چکباکسها در یک ستون منظورت هست؟

NasimBamdad
یک شنبه 21 مرداد 1397, 13:10 عصر
مظورت از عینا چیه؟ همه چکباکسها در یک ستون منظورت هست؟

بله در یک ستون

دقیقا مثل همین عکس میشه یه نگاهی بندازید
http://82.102.11.2/ch2.jpg

Mahmoud.Afrad
دوشنبه 22 مرداد 1397, 07:23 صبح
بله در یک ستون

دقیقا مثل همین عکس میشه یه نگاهی بندازید
http://82.102.11.2/ch2.jpg

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

راه دوم راحت تر هست
سمت برنامه یک دیتاتیبل با حداقل 3 ستون ایجاد کنید. (عضوبدن، گروه تگ، تگ)
باید متن تگها را به همراه یکی از کاراکترهای ☑ یا ☐ به صورت یک رشته به هم ملحق کنید و به همراه نام عضو و گروه تگ به دیتاتیبل اضافه کنید. در گزارش هم از یک cross-tab باید استفاده کنید.

Mahmoud.Afrad
سه شنبه 23 مرداد 1397, 21:58 عصر
ان هم فایل گزارش روش دوم
http://s8.picofile.com/file/8334531218/ReportMoayene.mrt.html

NasimBamdad
جمعه 26 مرداد 1397, 20:55 عصر
ان هم فایل گزارش روش دوم
http://s8.picofile.com/file/8334531218/ReportMoayene.mrt.html

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

همش یه ستون Total میاد وسط . در عکس هست . مشکل کار کجاست

Mahmoud.Afrad
جمعه 26 مرداد 1397, 21:20 عصر
از قسمت rows آیتم هاش رو انتخاب و پراپرتی show total را false کنید.

NasimBamdad
جمعه 26 مرداد 1397, 21:29 عصر
از قسمت rows آیتم هاش رو انتخاب و پراپرتی show total را false کنید.

سپاس حل شد .

2 تا مشکل دیگه هست . یکی اینکه من سمت راست ترین حالت قرارش دادم .اما بازم یه فاصله خالی وجود داره . چه طوری باید تنظیم بشه
دوم اینکه یک ستون اضافی آخر این کراس تب وجود داره که با مستطیل قرمز مشخص شده . چه طوری حذف اش کنم ؟

Mahmoud.Afrad
شنبه 27 مرداد 1397, 01:16 صبح
پراپرتی horizontal alignment را تنظیم کنید.

در مورد اون ستون اضافه نمیدونم چرا حذف نمیشه ولی میشه یک ستون بدون محتوا و بدون بوردر داشت، برای این کار یک ستون به قسمت summary اضافه کنید(فرقی نمیکنه چه ستونی)خصوصیت text و display value این ستون رو خالی کنید و border را روی none بزارید.

NasimBamdad
دوشنبه 29 مرداد 1397, 22:09 عصر
پراپرتی horizontal alignment را تنظیم کنید.

در مورد اون ستون اضافه نمیدونم چرا حذف نمیشه ولی میشه یک ستون بدون محتوا و بدون بوردر داشت، برای این کار یک ستون به قسمت summary اضافه کنید(فرقی نمیکنه چه ستونی)خصوصیت text و display value این ستون رو خالی کنید و border را روی none بزارید.

ممنونم ، حل شد این مورد با افزودن اون ستون اضافه. ولی بازم نمیاد سمت راست ترین . زیادی کراس تب هم کوچیک کنم که اصلا میشه 2 صفحه کنار هم .

NasimBamdad
دوشنبه 29 مرداد 1397, 23:29 عصر
راهی که به نظر من میرسه دو تاست.
یکی اینکه همون عکسی که من ارسال کردم رو در نظر بگیرید. در اینصورت بعد از ارسال دیتا به گزارش روی کامپوننتهای جدول پیمایش کنید و border سلولهایی که یک گروه هستند را تغییر بدید تا خطی بینشون نباشه. یه مقدار دقت میخواد که بتونید تشخیص بدید کدام سلول باید اصلاح بشه.

راه دوم راحت تر هست
سمت برنامه یک دیتاتیبل با حداقل 3 ستون ایجاد کنید. (عضوبدن، گروه تگ، تگ)
باید متن تگها را به همراه یکی از کاراکترهای ☑ یا ☐ به صورت یک رشته به هم ملحق کنید و به همراه نام عضو و گروه تگ به دیتاتیبل اضافه کنید. در گزارش هم از یک cross-tab باید استفاده کنید.

فکر می کنم راه حل دوم برام بهتر باشه

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

Mahmoud.Afrad
دوشنبه 29 مرداد 1397, 23:57 عصر
کوئری رو اصلاح کنید. در صورت نیاز از cross join و left join استفاده کنید.

NasimBamdad
یک شنبه 04 شهریور 1397, 01:31 صبح
راهی که به نظر من میرسه دو تاست.
یکی اینکه همون عکسی که من ارسال کردم رو در نظر بگیرید. در اینصورت بعد از ارسال دیتا به گزارش روی کامپوننتهای جدول پیمایش کنید و border سلولهایی که یک گروه هستند را تغییر بدید تا خطی بینشون نباشه. یه مقدار دقت میخواد که بتونید تشخیص بدید کدام سلول باید اصلاح بشه.

راه دوم راحت تر هست
سمت برنامه یک دیتاتیبل با حداقل 3 ستون ایجاد کنید. (عضوبدن، گروه تگ، تگ)
باید متن تگها را به همراه یکی از کاراکترهای ☑ یا ☐ به صورت یک رشته به هم ملحق کنید و به همراه نام عضو و گروه تگ به دیتاتیبل اضافه کنید. در گزارش هم از یک cross-tab باید استفاده کنید.
بخشید برای راه دوم کاراکتر تیک رو پیدا نمی کنم هرچی گوگل کردم . تیک خورده یا نخورده !
ب

Mahmoud.Afrad
یک شنبه 04 شهریور 1397, 01:39 صبح
بخشید برای راه دوم کاراکتر تیک رو پیدا نمی کنم هرچی گوگل کردم . تیک خورده یا نخورده !
ب

همین هایی هست که گذاشتم. ازش کپی کنید.

NasimBamdad
یک شنبه 04 شهریور 1397, 21:41 عصر
سپاس فراوان بالاخره دیتاتیبل درست شد و از روش دم یعنی ارسال کاراکتر های تیک خورده و نخورده استفاده کردم .

اما با Align کردن ستون ها مشکل دارم . , نمی تونم توی یک صفحه جاش بدم . فکر می کنم مشکل از اینه که در ستون سوم طول رشته ام زیاده و باید Break بشه و به سطر دوم بره ، اما نمیشه

NasimBamdad
یک شنبه 04 شهریور 1397, 22:06 عصر
از Word Wrap هم استفاده کردم نشد

Mahmoud.Afrad
یک شنبه 04 شهریور 1397, 22:50 عصر
پراپرتی horizontal alignment جدول را روی width قرار بدید.

NasimBamdad
یک شنبه 04 شهریور 1397, 22:52 عصر
قراردادم نشد. راستی یه سوالی چرا باید کراس تب رو توی یک دیتاباند قرار بدم ؟ ضرورتی داره ؟

عکس پیوست کردم .

اینم فایل گزارش

http://s8.picofile.com/file/8335561100/Paziresh.mrt.html

NasimBamdad
پنج شنبه 08 شهریور 1397, 15:43 عصر
راهی نیست یعنی ؟ امکانش نیست کمک کنید ؟