PDA

View Full Version : اضافه کردن فیلد در زمان اجرا به کریستال ریپورت



davoodrm666_666
یک شنبه 02 اسفند 1388, 11:22 صبح
سلام آقا من نیاز دارم که در زمان اجرا به کریستال ریپورت فیلد اضافه کنم این کار رو من توی کریستال ریپورت 8.5 با cryxdrt.ocx انجام دادم اما توی کریستال 10.5 در .net 2008 نمی دونم چه کار کنم

bad_boy_2007
شنبه 08 اسفند 1388, 20:03 عصر
تا آنجايي كه من كار كردم ، نميشود . در كريستال بايد از TypedDataset استفاده نماييد ، حتي همين ديتاست ها هم اگر تغييري در ساختارشان لحاظ گردد كريستال ساختار جديد را تشخيص نميدهد (مشكل بسيار بزرگي كه واقعا آزار دهنده است)

بياييد شما هم اغفال شويد و با StimulReport كار كنيد ، يكي از مهمترين ويژگي هاي اين ابزار پشتيباني از UntypedDataset ها هست . (اين جواب سوال شماست)

اين تكه اي از كد برنامه من است ، در برنامه ام جدولي دارم كه يوزر هر داده اي كه ميخواهد را با عنوان وارد ميكند مثلا : مدير عامل : رضايي - مسئول امور فني : غفوري - تلفن واحد فني : 0915 898 0915 و ... حال من اين داده ها را كه بصورت دو ستون و N سطر است را با كد زير به N سطر و دو ستون (ستون اول عنوان خصيصه و دومي مقدار) تبديل كردم و يوزر بصورت Runtime فيلدهاي مورد نظرش را در گزارش ميگذارد :



DS.Tables.Add("مشخصات تعریف شده کاربر")
With DS.Tables("مشخصات تعریف شده کاربر")
.Rows.Add()
For i As Integer = 0 To d.UserATT.Rows.Count - 1
.Columns.Add(d.UserATT(i).Name)
.Rows(0).Item(d.UserATT(i).Name) = d.UserATT(i).Value
Next
End With
Return DS


الحق كه StimulReport قدرت وحشتناكي دارد !!! :لبخند: توصيه ميكنم حتما نظري بيفنكنيد .

masoud333
دوشنبه 30 اردیبهشت 1392, 11:50 صبح
سلام چطور می تونم توی یک فرم 3 ورودی(تاریخ)دریافت کنم و اطلاعات مربوط به هرکدام از تاریخ ها بصورت مجزا کنار هم در یک گزارش نمایش داده شود.(کریستال ریپورت)
خیلی سئوال پرسیدم ولی هنوز جواب نگرفتم.لطفا پاسخ بدید.
ممنون

masoud333
پنج شنبه 09 خرداد 1392, 12:24 عصر
لطفا کمک کنید.با این همه الطهعات کمی هم به من کمک کنید.

alirezaahmadreza
شنبه 11 خرداد 1392, 11:00 صبح
سلام دوست گرامی
نمیدونم سوالتو درست متوجه شدم یا نه ولی خوب منم یک همچین مشکلی یک زمانی داشتم که میخواستم اعضای یک فیلد رو کنار هم واسم نمایش بده که به روش زیر حلش کردم حالا یک مثال واست میزنم انشاالله که همون چیزی باشه که شما میخوای:

فرض کن که من همچین اطلاعاتی دارم :

شماره | تاریخ
1 | 1390
1 | 1391
1 | 1392
2 | 1380
2 | 1381

و بعد میخوام اطلاعات به صورت زیر نمایش داده بشن :

شماره | تاریخ
1 | 1390 , 1391 , 1392
2 | 1380 , 1381

برای انجام چنین کاری شما باید چندین کار انجام بدی که قدم به قدم واست توضیح میدم:

گام اول:
شما باید ابتدا اطلاعات رو گروه بندی بکنی که اینجا اطلاعات رو باید بر اساس فیلد شماره اطلاعات رو گروه بندی بکنی که من اینجا از یاد دادن گروه بندی خود داری میکنم امیدوارم که آشنایی داشته باشی با گروه بندی اطلاعات

گام دوم:
شما باید سه فیلد فرمول ایجاد بکنی که هرکدوم یک کار را انجام میدن
1) GroupHeader
این فرمول عملیات ریست کردن مقدار رشته (رشته همان مقادیر فیلد تاریخ است که کنار هم قرار گرفته اند ) ما رو انجام میده یعنی هر دور که یک گروه جدید در اطلاعات به وجود میاد رشته مورد نظر ما را خالی میکنه
به عنوان مثال در مثال بالا هر دور که شماره عوض میشود مقادیر تاریخ دوباره از اول کنار هم قرار میگیرن.
در این فرمول از دستورات زیر استفاده میکنیم:

WhilePrintingRecords;
StringVar Days := "";

در حقیقت ما اینجا یک متغیر به اسم Days از نوع رشته ایجاد میکنیم که هر دور با ایجاد یک گروه مقدارش خالی میشود
این فرمول را باید در قسمت Group Header گزارشتون قرار بدید

2) Detail
این فرمول در حقیقت وظیفه چسباندن یا Concat کردن فیلد های تاریخ را بر عهده دارد
در این فرمول دستورات زیر را می نویسیم:

WhilePrintingRecords;
StringVar Days;
if(Days='')then
Days:=نام فیلد مورد نظر
else
Days:=Days+' , '+نام فیلد مورد نظر

توضیحی که باید اینجا عرض کنم خدمتتون اگه دقت کرده باشید باز ما اینجا یک متغیر با اسم Days ایجاد کردیم در حقیقت این متغیر یک متغیر سراسری هست ولی ما جهت استفاده از آن دوباره آن را تعریف کرده ایم ولی کریستال این موضوع را تشخیص میدهد که متغیری که در Group Header تعریف کردیم با این متغیر یکی است (از این روش حتی برای ارسال مقدار از یک Sub Report به گزارش اصلی نیز میتوان استفاده کرد) حالا اینجا در حقیقت فیلد مورد نظر را نوشته و مقادیر ان را در کنار هم در متغیر Days قرار میدهیم

این فرمول را باید در قسمت Detail گزارشتون قرار بدید و برای اینکه نمایش داده نشه میتونید آن را پنهانش بکنید

3) Group Footer
این قسمت وظیفه نمایش مقادیری که در کنار هم چسبانده شده اند را دارد در حقیقت مقادیر فیلد تاریخ را که کنار هم قرار گرفته اند را توسط این فرمول نمایش میدهیم

در این فرمول کد زیر را مینویسیم:

WhilePrintingRecords;
StringVar Days;

بازم در اینجا هم متغیر Days را دوباره تعریفش میکنیم و خود کریستال آن را تشخیص میدهد این دستور باعث میشود که مقادیر فیلد مورد نظر که کنار هم قرار گرفته اند در قسمت Group Footer نمایش داده بشن

این فرمول را باید در قسمت Group Footer قرار بدید

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

موفق باشید

masoud333
دوشنبه 13 خرداد 1392, 09:22 صبح
سلام.خیلی ممنون بابت جوابت.کمی بیشتر توضیح میدم شاید بتونی روش بهتری رو بهم یاد بدی.
توی Data base (اکسس) یکسری ماده در تاریخ های مختلف و با آنالیز های مربوط به آنها وارد شده است.
نیاز دارم به این صورت نمایش بدم که...
مثلا ماده x در تاریخ y و z و W آنالیز شده است.(آنالیز آنها موجود و در پایگاه ذخیره شده است).حالا توی یک فرم میخوام یک Combo قرار بدم که اسامی تمام مواد را نشان دهد و وقتی کاربر یکی از آنها را انتخاب کرد ،تاریخ هایی که از آن ماده ذخیره شده نمایش داده شده و کاربر سه تا از آون ها را انتخاب کنه آنالیز های مربوط به آن تاریخ ها(در واقع برای 1 ماده) بصورت ستونی در یک گزارش کنار هم نمایش داده شوند.
واقعا بهم لطف می کنی اگه مثل قبل کامل راهنماییم کنی.

masoud333
دوشنبه 13 خرداد 1392, 09:24 صبح
فقط ایکاش میتونستی یه نمونه کد واسم بزاری آخه اطلاعاتم یک هزارم تو نیست .
سخته واسم ولی باید حلش کنم.
حرف نداری

masoud333
شنبه 18 خرداد 1392, 12:11 عصر
سلام alirezaahmadreza عزیز.لطف کنید به سئوالم پاسخ بدید.

masoud333
سه شنبه 21 خرداد 1392, 15:03 عصر
سلام به همه دوستای برنامه نویس.
می خوام setup ایجاد کنم و مشکلی که دارم اینه که پایگاه داده من اکسس است و توی یع درایو به اسم خاصی ذخیره شده.چطور می توانم موقع نصب برنامه در سیستم هدف این فایل را در مسیری مشخص ایجاد کنم. مثل همیشه لطف کنید و راهنمایی کنید.

masoud333
دوشنبه 27 خرداد 1392, 07:15 صبح
لطفا یکی جواب بده.