PDA

View Full Version : از دیتاگرید به کریستال ریپورت



mah.yar
دوشنبه 09 بهمن 1385, 21:41 عصر
همونطور که می دونید:
1- اگه بر روی نام یک فیلد در دیتاگرید ویو کلیک کنیم رکوردها بر اساس مقادیر اون فیلد مرتب میشند(صعودی یا نزولی).
2- اگه بخوایم رکوردهای نمایش داده شده در یک دیتاگرید ویو رو به کریستال ریپورت ارسال کنیم میتونیم دیتاست مربوطه رو به کریستال ریپورت ارسال کنیم تا ...

سوال: چه جوری به کریستال ریپورت بفهمونیم که کاربر بر روی فیلد مثلا "نام" در دیتاگرید ویو کلیک کرده و آنها رو به صورت نزولی یا صعودی مرتب کرده و تو هم همین کار رو بکن.

خلاصه کلام: می خوام دقیقا اطلاعاتی که در دیتاگرید نمایش داده میشه(از نظر ترتیب رکوردها) به همون ترتیب در کریستال ریپورت نمایش بدم.:عصبانی++:

meh_secure
دوشنبه 09 بهمن 1385, 23:35 عصر
یک راه ساده اینه که اطلاعات درون دیتاگرید رو سطر به سطر درون یک datatable بریزید.( در زمان کلیک بر روی کلید گزارش یا ...)

mah.yar
سه شنبه 10 بهمن 1385, 00:20 صبح
چه جوری میشه اطلاعات رو سطر به سطر درون Datatable ریخت ؟؟.....؟

اگه میشه یه مثال ساده بزنید.

mah.yar
سه شنبه 10 بهمن 1385, 11:49 صبح
با کد زیر تونستم فقط اطلاعات یکی از فیلدها(ستونها) رو توی دیتاتیبل منتقل کنم و نمی دونم چه جوری بقیه فیلدها رو هم به دیتاتیبل منتقل کنم.
(جدول از دو فیلد name وID تشکیل شده و با کد زیر فقط اطلاعات فیلد ID به دیتاتیبل منتقل میشه و فیلد Name هیچ مقداری نداره)



Dim dt As New Data.DataTable("mahyar")
dt.Columns.Add("name")
dt.Columns.Add("id")

For i = 0 To DataGrid1.Rows.Count - 1
dt.Rows.Add(DataGrid1.Rows(i).Cells(0).Value)
Next

چه جوری رکوردهای دیتاگرید ویو رو توی دیتاتیبل بریزم؟:عصبانی++:

forozeshfard
سه شنبه 10 بهمن 1385, 16:50 عصر
با عرض سلام خدمت شما mah.yar
اگر امکان داره تکه کد یا یک مثال از فرستادن یک دیتا ست به کریستال ریپورت را اینجا بگذارید ممنون می شوم چون هرچه جستجو می کنم یک جواب درست و کامل را پیدا نمی کنم .محبت می کنید اگر با یک مثال راهنمایی نمایید .
باسپاس فراوان

ali_kolahdoozan
سه شنبه 10 بهمن 1385, 17:01 عصر
www.codeproject.com (http://www.codeproject.com)

mah.yar
سه شنبه 10 بهمن 1385, 17:42 عصر
با عرض سلام خدمت شما mah.yar
اگر امکان داره تکه کد یا یک مثال از فرستادن یک دیتا ست به کریستال ریپورت را اینجا بگذارید ممنون می شوم چون هرچه جستجو می کنم یک جواب درست و کامل را پیدا نمی کنم .محبت می کنید اگر با یک مثال راهنمایی نمایید .
باسپاس فراوان

برای این کار شما می تونید ابتدا فرم گزارش گیری تون رو توی کریستال ریپورت بسازید(ابتدا جدول مورد نیاز رو Export و سپس فیلدهایی که نیاز دارید رو توی کریستال قرار دهید)... تا اینجای کار اگه برنامه رو اجرا کنید تما رکوردهای موجود در جدول در کریستال نمایش داده میشه. اما اگه به عنوان مثال : بخواهید از شماره دانشجویی که در Textbox1 نوشته شده گزارش بگیرید:


dim con as new sqlconnection(......)
Dim sqlda As New sqlDataAdapter("select * from student where stno='" & textbox1.tex & "'", con)
Dim dataset As New DataSet
sqldar.Fill(dataset, "student")


Dim cr As New CrystalReport1
cr.SetDataSource(dataset)
CrystalReportViewer1.ReportSource = cr

mah.yar
سه شنبه 10 بهمن 1385, 17:46 عصر
بعد از کلی کلنجار رفتن موفق شدم رکوردهای توی دیتاگرید رو(به همون ترتیبی که نمایش داده میشه) رو به کریستال ریپورت ارسال کنم(با این روش دیگه نیازی نیست بدونیم از چه دیتاستی برای پر کردن دیتاگرید استفاده شده).
امیدوارم واسه بقیه هم مفید باشه:


Dim dt As New Data.DataTable("mahyar")
dt.Columns.Add("stno")
dt.Columns.Add("name")

For i = 0 To DataGrid1.Rows.Count - 1
Dim value() As String = {DataGrid1.Rows(i).Cells(0).Value, DataGrid1.Rows(i).Cells(1).Value}
dt.Rows.Add(value)
Next

Dim cr As New CrystalReport1
cr.SetDataSource(dt)
Me.CrystalReportViewer1.ReportSource = cr


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

dt.Columns.Add("stno")

rezaei manesh
چهارشنبه 11 بهمن 1385, 10:20 صبح
به نظر من روش خوبی نیست با این روش شما اطلاعات دیتا گرید را سطر به سطر وارد دیتاست می کند و..
حالا شما می تونید اینکاررو بکنید خود گرید رو با استفاده از دیتا ست پر کنید و همون دیتا ست رو که الان پر هم هست رو به کریستال ارسال کنید
حالا می مونه نوع مرتب سازی که باید ببینی کدوم یکی از روشها رو می تونی انجام بدین
اول باید بفهمی که کدوم ستون مرتب شده که اینو می شه فهمید (هر بار که کاربر ستونی رو مرتب می کنه نام اون رو در یه متغیر نگه دار )
بعد حالا یا این با استفاده از این نام دیتا ست خودت رو مرتب کن وعد به کریستال ببر یا این نام را به صورت پارامتر به کریستال ارسال کن و اونجا مرتب سازی رو انجام بده
خلاصه من اگه جای شما بودم سعی می کردم راهی رو پیدا کنم که فقط یک بار اطلاعات رو تو دیتاست پر کنم چه بر ای نمایش در گراید و چه کریستال

meh_secure
چهارشنبه 11 بهمن 1385, 23:40 عصر
بنده عرض کردم که یک راه ساده اینه.در این مورد هم که شما فرمودید باید بگم که دیتا گرید برای خودش یک دیتاویو داره که از طریق اون اطلاعات رو sort میکنه.

rezaei manesh
پنج شنبه 12 بهمن 1385, 08:06 صبح
اینم من پیدا کردم که دیگه نیازی به متغیر هم نیست خود گراید ویو یه متد داره که نشون میده با کدوم ستون sort شده