سلام
چطور میشه گزارشی ایجاد نمود که ستون گزارش ( فیلدها) توسط کاربر انتخاب و از انتخاب کاربر گزارش گرفته شود اگر کسی روش یا نمونه برنامه داره ممنونم که من را راهنمایی کنید
سلام
چطور میشه گزارشی ایجاد نمود که ستون گزارش ( فیلدها) توسط کاربر انتخاب و از انتخاب کاربر گزارش گرفته شود اگر کسی روش یا نمونه برنامه داره ممنونم که من را راهنمایی کنید
سلام
ما راه حلی که پیدا کردیم این بود : یک جدول که حاوی نام فیلدها هست رو ایجاد کردیم (برنامه ای نوشتیم که با ایجاد این جدول فیلدها در SQL Server ایجاد میشه) برای ایجاد گزارشی بصورت شناور اول این جدول رو Browse کردیم دادیم در اختیار کاربر هر چند تا فیلد دوست داره انتخاب میکنه بعد اون انتخاب شده ها رو توی یک Recordset می ریزیم داخل loop قرار میدیم. مثال:
Do Until rs2PYparameter1.EOF
,SELECT PYsalary1.FinanceYear, PYsalary1.MonthNo, PYsalary1.EmployeeNo
.PYsalary1
(("Trim(rs2PYparameter1.Fields("ParameterLatinNa me
rs2PYparameter1.MoveNext
If rs2PYparameter1.EOF = False Then
Union
End If
Loop
ولی برنامه هایی هست که Report Designer هستند اگه راه حلی پیدا کردین به ما هم بگین
اگر از ویرایش Developer کریستال رپورت استفاده کنی میتونی این کار رو به راحتی انجام بدی
سلام به Erfan_eng
می شه خواهش کنم که توضیح بیشتری بدهید که چطوری توی report اون فیلدهارو بصورت خودکار اضافه کردید؟
من هر کاری کردم نتونستم.
مرسی ممنون
یا علی
SQLReport گزارش ساز بانکهای اطلاعاتی SQLServer -Oracle -Access
http://www.developercenter.ir/Forum/...read.php?t=164
همونطوری که قبلا هم گفتم یه Table ایجاد کردیم که حاوی فیلدهاست. از ListView هم استفاده کردیم برای نمایش این Table . یعنی Browse کردیم ریختیم تو listViewنوشته شده توسط gh_fereydonpoor
Private Function FillSourceListViewParameter() As Boolean
Dim I As Integer
Dim itmFound As ListItem
SourceListViewParameter.ListItems.Clear
FillSourceListViewParameter = True
If rs1PYparameter1.BOF = True And rs1PYparameter1.EOF = True Then
FillSourceListViewParameter = False
"MsgBox "No Parameter
Exit Function
End If
rs1PYparameter1.MoveFirst
I = 1
Do Until rs1PYparameter1.EOF
Set itmFound = TargetListViewParameter. _
FindItem("" & rs1PYparameter1.Fields("ParameterLatinName"), lvwText, , lvwPartial)
If itmFound Is Nothing Then ' If no match, inform user and exit.
Set ListViewItem = SourceListViewParameter.ListItems.Add()
ListViewItem.Text = "" & rs1PYparameter1.Fields("ParameterLatinName")
ListViewItem.ForeColor = vbRed
' SourceListView.ListItems(i).ListSubItems.Add , , "" & rsBKaccount4.Fields("AccountLevel3")
SourceListViewParameter.ListItems(I).ListSubItems. Add , , "" & Trim(rs1PYparameter1.Fields("ParameterFarsiName"))
SourceListViewParameter.ListItems(I).ListSubItems. Add , , "" & rs1PYparameter1.Fields("ParameterType")
SourceListViewParameter.ListItems(I).ListSubItems. Add , , "" & rs1PYparameter1.Fields("ParameterSign")
I = I + 1
End If
rs1PYparameter1.MoveNext
Loop
SourceListViewParameter.Refresh
End Function
با سلام
دوستان اجازه بدید روشی رو که من ازش استفاده کردم و تقریبا 99% از خواسته های من و کارفرمای من رو جواب داده خدمت شما و سایر دوستانی که تمایل به استفاده از این روش دارن رو عرض کنم.
اولا من از VB6 و CR10 Advanced Developer Edition استفاده می کنم و نمی دونم که این قابلیت آیا در dot Net هم هست یا نه؟
درثانی من یه ریپورت جدید طراحی کردم و فقط query خودم رو بهش معرفی کردم و هیچ Object دیگه ای به اون اضافه نکردم. در کدهای فرمی که گزارش رو به کاربر نشون می دم (منظورم همون فرمی هست که ocx کریستال ریپورت توی اون قرار داره) کدهای زیر رو می نویسم:
Dim rsReport As New ADODB.Recordset
Dim Report As New CrystalReport
Private Sub Form_Load()
rsReport.Open "Select * From query"
Report. Database.SetDataSource rsReport
Report. DiscardSavedData
Report.DetailSection1.AddFieldObject [field],[left],[top]
Report.ReadRecords
CRViewer.ReportSource = Report
Screen.MousePointer = vbHourglass
CRViewer.ViewReport
Screen.MousePointer = vbDefault
End Sub
در این حالت شما باید بجای عبارت [field] نام فیلدی رو که کاربر انتخاب کرده رو قید کنید و باید از رسم الخط "{query.fieldname}" استفاده کنید.
نکته دیگه اینه که من یه table تعریف کردم که توی اون در هر رکوردی اسم فیلد query رو نوشتم و یه فیلد هم از نوع Boolean تعریف کردم که وقتی کاربر فیلدی از query رو انتخاب می کنه، من مقدار اون رو True می کنم و در قسمت اضافه کردن Objectها به ریپورتم تمامی فیلدهائی رو که کاربر انتخاب کرده با استفاده از این روش بهش نشون می دم.
شاید یه کم براتون این روش گیج کننده باشه، ولی اگر ساختار طراحی Tableها و queryهای شما منطقی باشن اون وقت متوجه می شید که خیلی راحت با این روش می تونید از گزارش پویا استفاده کنید. این نکته رو هم یادآوری کنم که من حتی سایز کاغذ رو هم متغیر تعریف کردم. یعنی بصورت پیش فرض کاغذ من A4 عمودی هست و با افزایش طول گزارش اون رو بصورت افقی در میارم و اگر باز هم طول گزارش بیشتر شد از کاغذ A3 استفاده می کنم.
در پایان باید اضافه کنم که برای استفاده از این روش می تونید از سمپل خود کریستال ریپورت به آدرس Program Files\Crystal Decision\Crystal Reports 10\Samples\En\Code\RDC\Visual Basic\Pro Athlete Salaries هم استفاده کنید. من بعضی از کارهام رو از اینجا ایده گرفتم.
امیدوارم که این مختصر توضیح جرقه ای برای ذهن دوستان جوان و فعال باشه تا با پشتکار بیشتر (و البته یه کمی هم صبر و حوصله) به آرزوهاشون برسن.
موفق باشید.
MEBAKHSHID FARSI NEMENEVISAM . FONTHAM GATI KARDE . YEK SOAL VAGTE AZ KARBAR ESM FIELD HA RO SOAL KARDIM . KHOB SARBARG ONHA RO CHIKAR KOINM ONHAM BAYAD BA ENTEKHAB AVAZ BESHEH