PDA

View Full Version : printتوی csharpچه جوریه



anahita6
یک شنبه 31 شهریور 1387, 18:00 عصر
سلام دوستان .میخواستم بپرسم چه جوری میشه از یک فایل متنی یا تصویریویا یک گزارش توی datagrideviewوچیزهای مشابه print گرفت.اگه کسی متونه کمکم کنه دستش درد نکنه .اگه یه دوست مهربون بتونه یه pdf معرفی کنه که خیلی بهتره

a_mzadeh
یک شنبه 31 شهریور 1387, 19:33 عصر
سلام دوستان .میخواستم بپرسم چه جوری میشه از یک فایل متنی یا تصویریویا یک گزارش توی datagrideviewوچیزهای مشابه print گرفت.اگه کسی متونه کمکم کنه دستش درد نکنه .اگه یه دوست مهربون بتونه یه pdf معرفی کنه که خیلی بهتره

سلام، شما هم ميتوني از كريستال ريپورت استفاده كني و هم خودت كار ساخت پرينت رو انجام بدي. اگر بخواي از كريستال ريپورت استفاده كني بايد اون رو ياد بگيري كه زياد هم سخت نيست بلكه خيلي هم آسونه. اما اگر بخواي از روش دوم استفاده كني، يعني خودت پرينت بسازي بايد يك كامپوننت printDocument تو فرمت بندازي و از اون استفاده كني. event اي بنام PrintPage داره كه بايد از اون استفاده كني. دو تا از چيزايي كه بايد از اونها استفاده كني اينها هستن:

e.HasMorePages كه مشخص ميكنه آيا تابع اين رويداد بايد دوباره اجرا بشه يا نه
... .e.Graphics كه براي رسم شكل و يا نوشتن متن استفاده ميشه

البته من روش دوم رو به خاطر سرعتش به روش اول ترجيح ميدم. موفق باشي.

asefy2008
یک شنبه 31 شهریور 1387, 19:55 عصر
سلام دوست میشه برای روش دوم یه مثال بزنی
اگر بخواهیم از فرم پرینت بگیریم باید چه کنیم؟
در مورد یه دیتاگرید چی؟(بدون کریستال )

a_mzadeh
دوشنبه 01 مهر 1387, 02:36 صبح
سلام دوست میشه برای روش دوم یه مثال بزنی
اگر بخواهیم از فرم پرینت بگیریم باید چه کنیم؟
در مورد یه دیتاگرید چی؟(بدون کریستال )


سلام،
با فرض اينكه يك ديتاگريد متشكل از دو ستون rowNo و name داريم و همچنين يك باتن كه قراره با هر بار كليك روي اون عمل چاپ انجام بشه.
يك كامپوننت PrintDocument روي فرم قرار ميديم
يك كامپوننت PrintDialog روي فرم قرار داده و متغير Document اون رو از طريق پنجره Properties مساوي نام كامپوننتي كه تو مرحله قبل روي فرم انداختيم قرار ميديم.
... شما در مرحله بعد ميتونيد از كامپوننتهاي ديگه اي از بخش كامپوننتهاي Printing استفاده كنيد ولي ما در اينجا ساده ترين حالت رو در نظر مي گيريم ...
حالا در رويداد كليك باتن مربوط به چاپ كد زير رو قرار ميديم:


private void btnPrint_Click(object sender, EventArgs e)
{
if (printDialog1.ShowDialog() != DialogResult.Cancel)
{
this.curRow = 0;
this.printDocument1.Print();
}
}
فراموش نكنيد كه براي مشخص كردن تعداد ركوردهايي كه تا كنون چاپ شدن بايد از يك متغير سراسري هم استفاده كنين. در صورتيكه محتويات بيش از يك صفحه باشه، از اين متغير استفاده ميكنيم.
حالا در رويداد PrintPage از كامپوننت PrintDocument كد مورد نظر رو اضافه مي كنيم


private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
// A4: 827 * 1169
SolidBrush b = new SolidBrush(Color.Black);
Font f = new Font("tahoma", 12);
int i=0;
while (i < 25 && this.curRow < dataGridView1.Rows.Count)
{
e.Graphics.DrawString(dataGridView1["rowNo", this.curRow].Value.ToString(), f, b, 100, 50 + i * 25);
e.Graphics.DrawString(dataGridView1["name", this.curRow].Value.ToString(), f, b, 150, 50 + i * 25);
i++;
this.curRow++;
}
e.HasMorePages = this.curRow < dataGridView1.Rows.Count;
}
البته ميتونين براي راست چين كردن متون فارسي هم يه كارايي بكنين. يه سرچ بكنين پيدا ميشه. فقط كافيه طول رشته اي كه قراره چاپ بشه پيدا كنين.

اگر شما بخواين دقيقا از تصوير فرمتون پرينت بگيرين بايد يك عكس از فرمتون بگيرين و اون رو به پرينتر بفرستين ولي فوق العاده روش بديه. چون بدليل اينكه شما يك عكس رو براي پرينت ميفرستين از كيفيت خيلي پاييني برخورداره

anahita6
دوشنبه 01 مهر 1387, 10:19 صبح
دوست عزیز من یه کم مبتدی هستم یه pdf نداری که آموزش کامل داده باشه؟

razavi_university
دوشنبه 01 مهر 1387, 10:56 صبح
یک کنترل برای اینکار (http://barnamenevis.org/forum/showpost.php?p=529602&postcount=5)

behrad110
دوشنبه 01 مهر 1387, 21:30 عصر
حالا که زحمت کشیده.یه توضیح مختصر هم راجبش بده دیگه رفیق

razavi_university
سه شنبه 02 مهر 1387, 15:10 عصر
فقط باید DLL اون رو به Refrence ها برنامه تون اضافه کنین و هر کنترلی رو که می خوایین ازش پرینت بگیرین رو بهش بفرستین .
توضیحات تکمیلی تر در CodeProject (http://www.codeproject.com/KB/miscctrl/PrintUtilityUserControls.aspx)

behrad110
سه شنبه 02 مهر 1387, 20:45 عصر
آقا خیلی ممنون بدرد خورد.

anahita6
چهارشنبه 03 مهر 1387, 17:15 عصر
برای من هم مفید بود. سپاسگزارم

ali_mnkt
چهارشنبه 03 مهر 1387, 17:33 عصر
فقط یک مشگل کوچولو:

cuRrow چیه؟

anahita6
شنبه 06 مهر 1387, 20:15 عصر
فقط یک مشگل کوچولو:

cuRrow چیه؟

رکورد جاری رو برمیگردونه.میگه تا وقتی حلقه بچرخه که رکوردی که الان مورد برسیه(رکوردی که الان توش هستیم)کمتر از تعداد کل رکورد ها باشه.

malkan
چهارشنبه 09 بهمن 1387, 16:48 عصر
سلام
با تشکر از دوست محترم a_mzadeh
من از راهنمایی شما استفاده کردم و بعد از اجرا این خطا رو بهم میده
Column named rowNo cannot be found.
Parameter name: columnName
ممنون می شم که کمکم کنی

این هموم کدی که شما در بالا هم داده بودید

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
// A4: 827 * 1169
SolidBrush b = new SolidBrush(Color.Black);
Font f = new Font("tahoma", 12);
int i=0;
while (i < 25 && this.curRow < dataGridView1.Rows.Count)
{
e.Graphics.DrawString(dataGridView1["rowNo", this.curRow].Value.ToString(), f, b, 100, 50 + i * 25);
e.Graphics.DrawString(dataGridView1["name", this.curRow].Value.ToString(), f, b, 150, 50 + i * 25);
i++;
this.curRow++;
}

msn_vb
یک شنبه 27 بهمن 1387, 15:35 عصر
شما باید به جای استفاده از نام rowNo در این دستورات نام ستون های Datagrid خودتون رو بدین
e.Graphics.DrawString(dataGridView1["rowNo", this.curRow].Value.ToString(), f, b, 100, 50 + i * 25);
e.Graphics.DrawString(dataGridView1["name", this.curRow].Value.ToString(), f, b, 150, 50 + i * 25);
یا اینکه نام ستون های Datagrid خودتون رو به rowNo و name تغییر بدین