PDA

View Full Version : چاپ محتویات datagridview (با انتخاب کاربر) به کمک stimulsoft



aliakbar2152
پنج شنبه 10 خرداد 1397, 02:02 صبح
سلام دوستان.من یک فرم درست کردم که توش دیتا گرید ویو که اتصال داره به یک بانک اکسس.تو ابن فرم برا دیتاگریدم یک جستجوهم گذاشتم که نتیجه اش رو دیتا گرید نمایش میده.یه دکمه چاپ هم براش گذاشتم که قبلش رفتم تو stimulsoft یه فایل ایجاد کردم .اتصالش دادم به بانک اکسس و فیلدهایی از جدول مورد اتصال اکسس که میخواستم به دیتا باندم اتصال دادم.بعد رفتم تو ویژوال استدیو تو دکمه چاپ این کد ها رو نوشتم اما فقط همه فیلدها رو چاپ میکنه یعنی موقعه ای که جستجو میکنم و تو دیتا گرید ویو مثلا از بین 50تا فیلد 10تارو انتخاب میکنم باز همه 50 تا فیلد رو چاپ میکنه.کجای کارم اشتباه است؟.اشکال تو کد نویسیش یا نحوه اتصال stimulsoft.من تو استیمول بعد از اتصال بانک ؛روی اون کلیکراست کردم بعد نیو دیتا سورس و بعد اولین گزینه قبل از دیتا آداپتر رو کلیک کردم و فیلدهای هایی که میخواستم رو از جدول بانک اکسس انتخاب و به دیتا باند اتصالش دادم.زیر کد نویسیم اینطوریه
DataTable dt = new DataTable();
dt.Columns.Add("Fullname");
dt.Columns.Add("Aztaraf");
dt.Columns.Add("Salon");
dt.Columns.Add("Sooit");
dt.Columns.Add("Takht");
dt.Columns.Add("Tarikh");
dt.Columns.Add("Modat");یسیم اینطوریه
DataTable dt = new DataTable();
dt.Columns.Add("Fullname");
dt.Columns.Add("Aztaraf");
dt.Columns.Add("Salon");
dt.Columns.Add("Sooit");
dt.Columns.Add("Hazineh");
for (int i = 0; i < dgw.Rows.Count; i++)
{
if(!dgw.Rows[i].IsSelected)
continue;
dt.Rows.Add(dgw.Rows[i].Cells[1].Value, dgw.Rows[i].Cells[2].Value, dgw.Rows[i].Cells[3].Value,
dgw.Rows[i].Cells[4].Value, dgw.Rows[i].Cells[5].Value, dgw.Rows[i].Cells[6].Value,
dgw.Rows[i].Cells[7].Value, dgw.Rows[i].Cells[8].Value);
}
StiReport report = new StiReport();
report.Load("RptList.mrt");
report.RegData("DataSource1", dt);
report.Reset();
report.Show();

danialafshari
پنج شنبه 10 خرداد 1397, 04:54 صبح
با سلام
لطفاً قوانین رو مطالعه کنید و قبل از ایجاد تاپیک جستجو کنید و کد رو در تگ C#‎‎‎ قرار دهید
در اعلان آموزش گزارشگیری با استیمول (http://barnamenevis.org/showthread.php?413328-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%87%D8%A7%DB%8C-%D9%88%DB%8C%D8%AF%DB%8C%D9%88%DB%8C%DB%8C-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-%D9%88-%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-%D9%87%D8%A7%DB%8C-%D9%85%D8%B1%D8%AA%D8%A8%D8%B7-%D8%A8%D8%A7-%D8%A2%D9%86&p=1900837&viewfull=1#post1900837)رو بصورت تصویری که توسط یکی از دوستان ساخته شده، لینک تاپیک رو قرار دادم میتونید مشاهده کنید.
توی کد نویسی شما اصلاً نیازی به حلقه و ... نیست و خیلی ساده تر از این حرفاست اگر سمت استیمول درست تعریف کردید کافیه دیتاسورس دیتاگرید رو به استیمول پاس بدید
اگر dt رو میخواهید پاس بدید بهتره DataTable رو در جنرال تعریف کنید که هم دیتاگرید و هم چاپ از اون استفاده کنند و اونوقت میتونید dt رو پاس بدید
این کد رو تست کنید ببینید مشکلتون حل میشه؟

if (dgw.RowCount == 0)
{
MessageBox.Show("اطلاعاتی برای چاپ وجود ندارد");
return;
}
StiReport report = new StiReport();
report.Load("RptList.mrt");
report.RegData("DataSource1", dgw.DataSource);
report.Show();

شرط وقتی درست عمل میکنه که Enable Adding دیتاگریدویو غیرفعال باشه
موفق باشید

aliakbar2152
پنج شنبه 10 خرداد 1397, 14:58 عصر
سلام استاد از راهنمایتون ممنون.عالی بود:تشویق: