PDA

View Full Version : فرم child و کریستال ریپورت



khomar
شنبه 14 آذر 1388, 23:32 عصر
چرا اگه یک فرم خاصیت child داشته باشه و از قضا همون فرم توش ویو کرییستال ریپورت داشته باشی باز نمی شه؟ یعنی در عرض چند ثانیه باز می شه و بسته می شه . امتحان کردم وقتی کد زیر بر می دارم مشکل حل می شه.

Me.MdiParent = MDIParent1

bastakboys
یک شنبه 15 آذر 1388, 03:14 صبح
فکر نکنم مشکل از اینجا باشه
اخه من خودم این کار را می کنم
تنها مشکلم هم کند باز شدن که در یک فرم معمولی هم همینطوره
در ضمن شما کدت را اینجا بگذار شاید مشکل از جای دیکه ای است

khomar
یک شنبه 15 آذر 1388, 10:59 صبح
این که مشکل از کدی که گفتم باشه غیر منطقی اما فکر نمی کنم مشکل از کد های زیر باشه.
کد ها زیر توی یه باتون که توی فرمم هست نوشتم که دیگه مشخص چیکار می کنه

If TabControl1.SelectedIndex = 1 Then

Dim strsqlc As String = "select * from cd where"
If TextBox6.Text <> "" Then
strsqlc += " (code_cd='" + TextBox6.Text + "')"
End If
If TextBox7.Text <> "" Then
If strsqlc.Length > 22 Then
strsqlc += " And "
End If
strsqlc += " (name='" + TextBox7.Text + "')"
End If
If ComboBox2.Text <> "" Then
If strsqlc.Length > 22 Then
strsqlc += " And "
End If
strsqlc += " (type='" + ComboBox2.Text + "')"
End If
If TextBox8.Text <> "" Then
If strsqlc.Length > 22 Then
strsqlc += " And "
End If
strsqlc += " (many =" + TextBox8.Text + ")"
End If
If TextBox9.Text <> "" Then
If strsqlc.Length > 22 Then
strsqlc += " And "
End If
strsqlc += " (vertion=" + TextBox9.Text + ")"
End If
If strsqlc.Length = 22 Then
strsqlc = strsqlc.Remove(17, 5)
End If
dt = db.myselect(strsqlc)

If dt.Rows.Count.ToString = 0 Then
'MessageBox.Show("هیج موردی یافت نشد")
Label7.Text = "هیج موردی یافت نشد"
' DataGrid1.DataSource = dt
DataGridView1.DataSource = dt
DataGridView1.Columns(0).HeaderText = "کد سی دی "
DataGridView1.Columns(1).HeaderText = "نام سی دی"
DataGridView1.Columns(2).HeaderText = "نوع"
DataGridView1.Columns(3).HeaderText = "تعداد سی دی"
DataGridView1.Columns(4).HeaderText = "ورژن"
Else
' MessageBox.Show(" یافت شد " + dt.Rows.Count.ToString)
Label7.Text = dt.Rows.Count.ToString + " سی دی یافت شد"
'DataGrid1.DataSource = dt
DataGridView1.DataSource = dt
r.SetParameters()
'r.ShowReports(dt, "cd1.rpt")
Dim fc As New Form13
fc.cd1.Load("cd1.rpt")
fc.cd1.SetDataSource(dt)
fc.CrystalReportViewer1.ReportSource = fc.cd1
fc.ShowDialog()
DataGridView1.Columns(0).HeaderText = "کد سی دی "
DataGridView1.Columns(1).HeaderText = "نام سی دی"
DataGridView1.Columns(2).HeaderText = "نوع"
DataGridView1.Columns(3).HeaderText = "تعداد سی دی"
DataGridView1.Columns(4).HeaderText = "ورژن"
End If



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

CrystalReportViewer1
و
report document
دارم


Private Sub Form13_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.MdiParent = MDIParent1
End Sub



کد دیگه ای ندارم:متفکر:

viper2009
یک شنبه 15 آذر 1388, 12:09 عصر
MDIParent1 فرم مادره؟

ACorvinus
یک شنبه 15 آذر 1388, 12:58 عصر
سلام .

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

شما هر بار چک کردین که آیا طول ConnectionString شما اگه بیشتر از 22 هستش یه AND اضافه می کنین که این کار خوانایی برنامه شما رو به شدت پایین میاره. به این روشی که من گفتم ببینین دوست دارین یا نه .



Dim strsqlc As String = "SELECT * FROM cd WHERE "

If Not String.IsNullOrEmpty(TextBox1.Text) Then
strsqlc += "(code_cd='" + TextBox1.Text + "') AND "
End If

If Not String.IsNullOrEmpty(TextBox2.Text) Then
strsqlc += "(name='" + TextBox2.Text + "') AND "
End If

If Not String.IsNullOrEmpty(TextBox3.Text) Then
strsqlc += "(type='" + TextBox3.Text + "')"
End If

If strsqlc.EndsWith("AND ") Then
strsqlc = strsqlc.Substring(0, strsqlc.Length - 4)
ElseIf strsqlc.EndsWith("WHERE ") Then
strsqlc = "SELECT * FROM cd"
End If



البته اگه شرطهای متوالی داشته باشین روشی که من گفتم هم درست نیست ( من نمیگم، Microsoft میگه )
در اون صورت جمع رشته ها به صورت StrConnection += Str روش خوبی نیست اگه تمام فیلدهای شما پر باشه !!! و باید از StringBuilder استفاده کنین.

به هرحال من فقط خواستم کمکی کرده باشم در خوانایی برنامه تون .

موفق باشین .

bastakboys
یک شنبه 15 آذر 1388, 14:59 عصر
دوست عزیز من نتونستم مشکلی ببینم اما دلیل نمیشه که نیست مثال:
من در یک لود فرم فرزند دارم که


For a As Integer = 0 To DataGridView2.Rows.Count - 1
DataGridView1.Rows.Add(DataGridView2.Item("FactorDateDGV2", a).Value, _
"خرید", DataGridView2.Item("PayableTaleDGV2", a).Value, _
DataGridView2.Item("PayTaleDGV2", a).Value, _
DataGridView2.Item("RemainTaleDGV2", a).Value)
DataGridView1.Sort(DataGridView1.Columns("ClDate"), System.ComponentModel.ListSortDirection.Ascending)
Next

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


For a As Integer = 0 To DataGridView2.Rows.Count - 1
DataGridView1.Rows.Add(DataGridView2.Item("FactorDateDGV2", a).Value, _
"خرید", DataGridView2.Item("PayableTaleDGV2", a).Value, _
DataGridView2.Item("PayTaleDGV2", a).Value, _
DataGridView2.Item("RemainTaleDGV2", a).Value)
Next
DataGridView1.Sort(DataGridView1.Columns("ClDate"), System.ComponentModel.ListSortDirection.Ascending)


با اینکه کد من درسته
در همون خط Me.MdiParent = MDIParent1 ارور میده

khomar
یک شنبه 15 آذر 1388, 21:03 عصر
MDIParent1 فرم مادره؟

بله فرم مادره

khomar
یک شنبه 15 آذر 1388, 21:19 عصر
acorvinus
عزیر ممنون از راهنمایی تون اصولا کسی نمی یاد بگه کدت خوانا نیست یا
....
در هر صورت لطف کردید

bastajboys
عزیز منظور شما را می فهمم اما اینکه بفهمی کحاش و باید تغییر بدی خودش ....

viper2009
دوشنبه 16 آذر 1388, 00:44 صبح
می تونی فرم مربوط به کریستال ریپورتت رو در حالت های Normal و Max و Min امتحان کنی
واسه من اینطوری شد ولی با کم و زیاد کردن سایزها و امتحان همین حالت ها مشکل برطرف شد

khomar
جمعه 27 آذر 1388, 00:45 صبح
سلام
من مشکلم حل شد.کد زیر رو از لود فرمی که کریستال ریپورت توش داشتم برداشتم و به فرمی که توش select
داشتم منتقل کردم

Dim fs As New Form12
fs.MdiParent = MDIParent1
و به جای کد زیر

fs.ShowDialog()

از کد زیر استفاده کردم

fs.Show()
این اینجا گذاشتم اگه کسی به مشکل من برخورد کرد مشکلش حل بشه چون سرچ که می کردم دیدم بعضی ها مشکل منو دارم اما ظاهرا جواب نگرفتند.

saeedr22
جمعه 27 آذر 1388, 01:10 صبح
سلام .

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

شما هر بار چک کردین که آیا طول ConnectionString شما اگه بیشتر از 22 هستش یه AND اضافه می کنین که این کار خوانایی برنامه شما رو به شدت پایین میاره. به این روشی که من گفتم ببینین دوست دارین یا نه .



Dim strsqlc As String = "SELECT * FROM cd WHERE "

If Not String.IsNullOrEmpty(TextBox1.Text) Then
strsqlc += "(code_cd='" + TextBox1.Text + "') AND "
End If

If Not String.IsNullOrEmpty(TextBox2.Text) Then
strsqlc += "(name='" + TextBox2.Text + "') AND "
End If

If Not String.IsNullOrEmpty(TextBox3.Text) Then
strsqlc += "(type='" + TextBox3.Text + "')"
End If

If strsqlc.EndsWith("AND ") Then
strsqlc = strsqlc.Substring(0, strsqlc.Length - 4)
ElseIf strsqlc.EndsWith("WHERE ") Then
strsqlc = "SELECT * FROM cd"
End If



البته اگه شرطهای متوالی داشته باشین روشی که من گفتم هم درست نیست ( من نمیگم، Microsoft میگه )
در اون صورت جمع رشته ها به صورت StrConnection += Str روش خوبی نیست اگه تمام فیلدهای شما پر باشه !!! و باید از StringBuilder استفاده کنین.


به هرحال من فقط خواستم کمکی کرده باشم در خوانایی برنامه تون .



موفق باشین .



به جای اینکه از EndsWith و توابع اضافه دیگه استفاده کنین بهتره که در همین روش یه شرظ همیشه درسط در ابتدا داشته باشیم بعد بقیه and داشته باشند در اولشان
مثلا
q=select *from tbl where 1=1
if txt<>null the
q+= and name =txt
..
.
.
.
.