مشکل در ارسال عکس به استیمول سافت به دفعات
سلام دوستان
برنامه رو سی شارپی و یا ویندوز فرم نوشتم ... برای چاپ هم از استیمول سافت استفاده کردم
توی چاپ کاربرگ مشخصات فردی برای اولین بار دارم از عکس هم استفاده می کنم
برای ارسال عکس توی استیمول یک variable از نوع ایمیج تعریف کردم و اون رو درون ایمیج باکس قرار دادم و از کد زیر برای ارسال عکس استفاده کردم
report.Dictionary.Variables["Image"].ValueObject = Image.FromFile(Application.StartupPath + @"\pic\st" + codemelli + ".jpg");
عکس ها کنار برنامه توی پوشه خودش و با نام کد ملی هر شخص ذخیره شدند
خب با این روش مشکلی نیست و عکس نمایش داده میشه اما من چاپ کاربرگ هام به صورت تجمعی هست و بدین صورت عمل کردم که هر چند تا که بوسیله چک باکس درون دیتاگریدویو تیک میخورند ارسال میشن به چاپ
بنابراین از این کد استفاده کردم :
StiReport report = new StiReport();
report.LoadEncryptedReport(Application.StartupPath + @"\rep\stkar.mrx", "1234");
DataTable dt = new DataTable();
dt.Columns.Add("melli");
dt.Columns.Add("name");
dt.Columns.Add("family");
for (var i = 0; i < rgv.RowCount; i++)
{
if (!Convert.ToBoolean(rgv.Rows[i].Cells[0].Value)) continue;
report.Dictionary.Variables["Image"].ValueObject = Image.FromFile(Application.StartupPath + @"\pic\st" + rgv.ChildRows[i].Cells[1].Value.ToString() + ".jpg");
dt.Rows.Add(rgv.ChildRows[i].Cells[1].Value,
rgv.ChildRows[i].Cells[2].Value,
rgv.ChildRows[i].Cells[3].Value);
}
report.RegData("DataSource1", dt);
report.Reset();
report.Show();
خب وقتی یک مورد تیک میخوره مشکلی نیست باز هم چاپ میشه اون قسمت ادرس عکس هم کد ملی رو از سلول اول که همون کد ملی هست میگیره
اما وقتی چند مورد رو تیک میزنم برای همه عکس ردیف آخر نمایش داده میشه
در واقع اطلاعات درست نمایش داده میشن و تکراری نیستند ولی هر ردیف آخر باشه عکسش برای همه تکرار میشه
خودم خیلی ور رفتم نمیدونم کجای کارم اشکال داره
ممنون میشم راهنمایی کنید
نقل قول: مشکل در ارسال عکس به استیمول سافت به دفعات
به جای variable ، به DataSource1 و همچنین دیتاتیبل یک ستون از نوع image اضافه کنید. عکسها را هم به دیتاتیبل اضافه و به گزارش ارسال کنید.
نقل قول: مشکل در ارسال عکس به استیمول سافت به دفعات
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
به جای variable ، به DataSource1 و همچنین دیتاتیبل یک ستون از نوع image اضافه کنید. عکسها را هم به دیتاتیبل اضافه و به گزارش ارسال کنید.
ممنون استاد بسیار عالی
فقط یه جا مشکل برخوردم اون هم اینکه باید نوع ستونی که به دیتاتیبل اضافه می کنیم رو از نوع ایمیج معرفی کنیم اینطوری :
dt.Columns.Add("image", typeof(System.Drawing.Image));
اگر نوع مشخص نشه کار نمی کنه
این رو گفتم شاید به درد فرد دیگه ای هم بخوره
باز هم ممنون و متشکرم
نقل قول: مشکل در ارسال عکس به استیمول سافت به دفعات
یه سوال دیگه ...
الان که تست گرفتم متاسفانه یه خطای دیگه دارم اون هم اینکه اگر بین اون هایی که تیک میخورند موردی باشه که عکس نداشته باشه باعث میشه اکسپشن بده و چاپ داده نشه
چطوری میشه این رو مدیریت کرد که مثلا اگر عکسی موجود نبود اتفاقی نیفته یعنی بدون عکس چاپ بشه ... اگر هم بشه یه عکس پیشفرض داد بابت اون هایی که عکس ندارند که عالی میشه
کد نهایی ام اینطوری شد :
StiReport report = new StiReport();
report.LoadEncryptedReport(Application.StartupPath + @"\rep\stkar.mrx", "1234");
DataTable dt = new DataTable();
dt.Columns.Add("melli");
dt.Columns.Add("name");
dt.Columns.Add("family");
dt.Columns.Add("image", typeof(System.Drawing.Image));
for (var i = 0; i < rgv.RowCount; i++)
{
if (!Convert.ToBoolean(rgv.Rows[i].Cells[0].Value)) continue;
dt.Rows.Add(rgv.ChildRows[i].Cells[1].Value,
rgv.ChildRows[i].Cells[2].Value,
rgv.ChildRows[i].Cells[3].Value,
Image.FromFile(Application.StartupPath + @"\pic\st" + rgv.ChildRows[i].Cells[1].Value + ".jpg"));
}
report.RegData("DataSource1", dt);
report.Reset();
report.Show();
ممنون
نقل قول: مشکل در ارسال عکس به استیمول سافت به دفعات
نقل قول:
نوشته شده توسط
barman.ar16
یه سوال دیگه ...
الان که تست گرفتم متاسفانه یه خطای دیگه دارم اون هم اینکه اگر بین اون هایی که تیک میخورند موردی باشه که عکس نداشته باشه باعث میشه اکسپشن بده و چاپ داده نشه
چطوری میشه این رو مدیریت کرد که مثلا اگر عکسی موجود نبود اتفاقی نیفته یعنی بدون عکس چاپ بشه ... اگر هم بشه یه عکس پیشفرض داد بابت اون هایی که عکس ندارند که عالی میشه
کد نهایی ام اینطوری شد :
StiReport report = new StiReport();
report.LoadEncryptedReport(Application.StartupPath + @"\rep\stkar.mrx", "1234");
DataTable dt = new DataTable();
dt.Columns.Add("melli");
dt.Columns.Add("name");
dt.Columns.Add("family");
dt.Columns.Add("image", typeof(System.Drawing.Image));
for (var i = 0; i < rgv.RowCount; i++)
{
if (!Convert.ToBoolean(rgv.Rows[i].Cells[0].Value)) continue;
dt.Rows.Add(rgv.ChildRows[i].Cells[1].Value,
rgv.ChildRows[i].Cells[2].Value,
rgv.ChildRows[i].Cells[3].Value,
Image.FromFile(Application.StartupPath + @"\pic\st" + rgv.ChildRows[i].Cells[1].Value + ".jpg"));
}
report.RegData("DataSource1", dt);
report.Reset();
report.Show();
ممنون
اگر رکوردی عکس نداشته باشد مسیر عکس نامعتبر خواهد بود. قبل از خط11 چک کنید اگر رکورد دارای عکس نبود null و یا آدرس یک عکس پیشفرض را ارسال کنید.
نقل قول: مشکل در ارسال عکس به استیمول سافت به دفعات
نقل قول:
نوشته شده توسط
barman.ar16
یه سوال دیگه ...
الان که تست گرفتم متاسفانه یه خطای دیگه دارم اون هم اینکه اگر بین اون هایی که تیک میخورند موردی باشه که عکس نداشته باشه باعث میشه اکسپشن بده و چاپ داده نشه
چطوری میشه این رو مدیریت کرد که مثلا اگر عکسی موجود نبود اتفاقی نیفته یعنی بدون عکس چاپ بشه ... اگر هم بشه یه عکس پیشفرض داد بابت اون هایی که عکس ندارند که عالی میشه
کد نهایی ام اینطوری شد :
StiReport report = new StiReport();
report.LoadEncryptedReport(Application.StartupPath + @"\rep\stkar.mrx", "1234");
DataTable dt = new DataTable();
dt.Columns.Add("melli");
dt.Columns.Add("name");
dt.Columns.Add("family");
dt.Columns.Add("image", typeof(System.Drawing.Image));
for (var i = 0; i < rgv.RowCount; i++)
{
if (!Convert.ToBoolean(rgv.Rows[i].Cells[0].Value)) continue;
dt.Rows.Add(rgv.ChildRows[i].Cells[1].Value,
rgv.ChildRows[i].Cells[2].Value,
rgv.ChildRows[i].Cells[3].Value,
Image.FromFile(Application.StartupPath + @"\pic\st" + rgv.ChildRows[i].Cells[1].Value + ".jpg"));
}
report.RegData("DataSource1", dt);
report.Reset();
report.Show();
ممنون
طبق فرموده استادمون مهندس افراد
StiReport report = new StiReport();
report.LoadEncryptedReport(Application.StartupPath + @"\rep\stkar.mrx", "1234");
DataTable dt = new DataTable();
dt.Columns.Add("melli");
dt.Columns.Add("name");
dt.Columns.Add("family");
dt.Columns.Add("image", typeof(System.Drawing.Image));
for (var i = 0; i < rgv.RowCount; i++)
{
string imagepath = Application.StartupPath + @"\pic\st" + rgv.ChildRows[i].Cells[1].Value + ".jpg";
if (!File.Exists(imagepath))
{
imagepath = "آدرس عکس پیشفرض";
}
if (!Convert.ToBoolean(rgv.Rows[i].Cells[0].Value)) continue;
dt.Rows.Add(rgv.ChildRows[i].Cells[1].Value,
rgv.ChildRows[i].Cells[2].Value,
rgv.ChildRows[i].Cells[3].Value,
Image.FromFile(imagepath));
}
report.RegData("DataSource1", dt);
report.Reset();
report.Show();
دوست عزیز یه پیشنهادی هم بهتون بدم چون یه بار سر خودم اومده و کلی کار رو دستم گذاشت گفتم به شمام بگم. بجای استفاده از ایندکس ستون ها از اسمشون استفاده کنید. درصورت تغییر ترتیب ستونها باید ایندکسون رو تو کد نویسی تغییر بدید ولی اگه از اسمشون استفاده کنید اونهارو صرفا بر اساس اسماشون استفاده میکنید و نیازی به خاطر سپردن موقعیتشون نداری.
rgv.Rows[i].Cells[0].Value
رو مثلا به این صورت
rgv.Rows[i].Cells["IsSelected"].Value
نقل قول: مشکل در ارسال عکس به استیمول سافت به دفعات
سلام
سه خط کد آخر رو به شکل زیر تغییر بده
report.RegData("DataSource1", dt);
//report.Reset();
report.Render();
report.Show(true);
report.ResetRenderedState();
نقل قول: مشکل در ارسال عکس به استیمول سافت به دفعات
نقل قول:
نوشته شده توسط
shahryari
سلام
سه خط کد آخر رو به شکل زیر تغییر بده
report.RegData("DataSource1", dt);
//report.Reset();
report.Render();
report.Show(true);
report.ResetRenderedState();
سلام
ممنون بابت راهنمایی ... علت رو هم میفرمایید
منظورم اینه که بابت سوالی که من پرسیدم هست یا یک تجربه کاری ...؟؟؟