PDA

View Full Version : چاپ datagridview بصورت راست به چپ واقعی!



arash.s
دوشنبه 16 دی 1387, 17:15 عصر
سلام
من دو روزه دارم دنبال یه روش می گردم که datagrdivew رو بصورت راست به چپ چاپ کنم، (یعنی متن داخل خونه های دیتاگریدویو RTL باشه، نه اینکه فقط ترتیب چینش ستون ها از راست به چه باشه) ولی به نتیجه نرسیدم.
جستجوهای فارسی همشون به این ختم می شن که اینکارو نمی کنه:
http://www.barnamenevis.org/forum/showthread.php?p=317148
و انگلیسی ها هم که کلا LTR هستن.

کسی می دونه اصلا همچین چیزی امکان داره؟ (چه تو .NET 2.0 و چه تو NET 3.0)
و اگه آره، ممنون میشم یه راهنمایی حتی در حد یه اشاره داشته باشید. ممنون

shervin_agh67
سه شنبه 17 دی 1387, 02:15 صبح
در قسمت properties گریدویو گزینه DefaultCellStyle رو انتخاب کن و در زیر صفحه گزینه Aligment رو می بینی . و دقیقا همون کاری رو می کنه که توی می خوای . در این حالت چینش ستونها از چپ به راسته ولی متن از راست به چپه ، اگه می خوای چینش ستونها هم عوض بشه کد زیر :


this.dataGridView1.RightToLeft = System.Windows.Forms.RightToLeft.Yes;

فکر کنم منظورت همین بود . اگه نیست فایل پروژت یا تکه کدش رو بذار .

abi_sarab
پنج شنبه 19 دی 1387, 11:17 صبح
آقا شروین مشکل منم همینه
فایلی که ضممه کردم ببین
نظرتو بگو

abi_sarab
یک شنبه 22 دی 1387, 11:47 صبح
کسی نیست جواب بده؟

rezatati
پنج شنبه 31 اردیبهشت 1388, 00:17 صبح
با سلام خدمت دوستان

من این کلاس رو که در اینجا آپلود کردم از اینترنت گیر آوردم و با کمی تغییرات اونه به یک کلاس کاملا راست به چپ تبدیل کردم و امیدوارم که به درد دوستان بخوره و مشکلشونو حل کنه

این لینک اصلی مقاله

http://www.codeproject.com/KB/printing/DGVPrinter.aspx

این هم کلاسی که خودم تغییرش دادم

http://rapidshare.com/files/235314411/DGVPrinter.rar.html

ho_612
چهارشنبه 20 آبان 1388, 19:06 عصر
با سلام خدمت دوستان

من این کلاس رو که در اینجا آپلود کردم از اینترنت گیر آوردم و با کمی تغییرات اونه به یک کلاس کاملا راست به چپ تبدیل کردم و امیدوارم که به درد دوستان بخوره و مشکلشونو حل کنه

این لینک اصلی مقاله

http://www.codeproject.com/KB/printing/DGVPrinter.aspx

این هم کلاسی که خودم تغییرش دادم

http://rapidshare.com/files/235314411/DGVPrinter.rar.html

آقا لینک دوم مشکل داره!!

moferferi
چهارشنبه 20 آبان 1388, 19:37 عصر
اقا لطف کن توی 2shared یا 4shared اپلود کن.لینک خرابه

c-sharp_South
یک شنبه 06 اسفند 1391, 15:32 عصر
کسی نیست این تاپیک رو کامل کنه ؟؟؟
چند روزه مشکل من هم همینه . هرکاری میکنم حل نمیشه . هیچ جا هم براش جواب درستی پیدا نکردم.
ممنون میشم دوستان لطف کنن تاپیک رو به جواب برسونن

Esmail Solhkhah
یک شنبه 06 اسفند 1391, 23:22 عصر
کسی نیست این تاپیک رو کامل کنه ؟؟؟
چند روزه مشکل من هم همینه . هرکاری میکنم حل نمیشه . هیچ جا هم براش جواب درستی پیدا نکردم.
ممنون میشم دوستان لطف کنن تاپیک رو به جواب برسونن

دوست عزیز خود بنده حداقل دوتا پرینت از گرید ویو گذاشتم با این قابلیت ، یکیش با PrintDGV - یکیش با استیمول
تو قسمت نمونه برنامه های کوچک و مفيد در سي شارپ ، زحمت پیدا کردن شماره پست با خودتون

موفق باشید.

c-sharp_South
سه شنبه 15 اسفند 1391, 11:58 صبح
آقای Esmail Solhkhah (http://barnamenevis.org/member.php?27551-Esmail-Solhkhah) من تمام 23 صفحه ی بخش برنامه های کوچک و مفید رو گشتم
چند تا تاپیک واسه پرینت بود ولی هرچی نگاه کردم اون چیزی نبود که میخواستم . یکی PrintDGV بود که واسه VB بود.
چند هفته است فقط الاف همین کار هستم . این مشکلم حل بشه کل پروژه ام تموم میشه و اماده استفاده.
دیتابیس من Access است و از ado استفاده شده.

pedram.11
سه شنبه 15 اسفند 1391, 12:08 عصر
سلام اونطوری که من فهمیدم شما علاوه بر راست چین شدن ستون ها میخواید محتویات سلول ها هم جابجا بشه، برای اینکار توی قسمت پراپرتیز مربوط به دیتاگریدویو توی گزینه RowsDefaultCellStyle خاصیت Alignment رو تغییر بدید

c-sharp_South
سه شنبه 15 اسفند 1391, 13:07 عصر
دیتاگریدویو من در فرم ام به این شکل است:
http://upload.tehran98.com/img1/0hltuvxp3vwofo8q77jh.png

اما وقتی که میخوام پرینت بگیرم به این شکل ظاهر میشه:
http://upload.tehran98.com/img1/qpnva545xk0hhq78.png

میخوام موقع پرینت هم اطلاعات از راست به چپ نشون داده بشه.

pedram.11
سه شنبه 15 اسفند 1391, 14:06 عصر
یه نگاه به این بندازید:
100908

100907

c-sharp_South
سه شنبه 15 اسفند 1391, 14:26 عصر
عـــالــــــیــــــــــــ ـــــــــــه . واقــعـــــــــــا مــــــــــــرســــــــــ ـــــــــــی :قلب:
آخرین سوال در همین مورد . این کد میاد از تمام Columns ها پرینت میگیره.
چطور میشه براش تعیین کرد که مثلا از:
dataGridView1.Columns[1]
dataGridView1.Columns[4]
dataGridView1.Columns[5]
dataGridView1.Columns[11]
dataGridView1.Columns[17]
dataGridView1.Columns[19]
پرینت بگیره . چون جدول dataGridView ای که استفاده میکنم خیلی بزرگه فقط میخوام اطلاعات اصلی که نیاز به چاپ دارن چاپ بشن.

pedram.11
سه شنبه 15 اسفند 1391, 14:32 عصر
توی حلقه میتونید دستور سویچ بزارید:
for (int j = this.dataGridView1.Columns.Count - 1; j > -1; j--)
{
switch (j)
{
case 1:
case 4:
case 5:
case 11:
case 17:
case 19:
....
break;
}
}

c-sharp_South
سه شنبه 15 اسفند 1391, 14:50 عصر
داره جواب نمیده. :گیج:
نمیشه با گذاشتن یک Checkbox و check گذاشتن برای اون قبل از پرینت به این صورت:


if (checkBox1.Checked == true)
{
dataGridView1.Columns[0].Visible = false;
dataGridView1.Columns[1].Visible = false;
dataGridView1.Columns[5].Visible = false;
dataGridView1.Columns[13].Visible = false;
dataGridView1.Columns[14].Visible = false;
dataGridView1.Columns[15].Visible = false;
dataGridView1.Columns[16].Visible = false;
dataGridView1.Columns[18].Visible = false;
dataGridView1.Columns[20].Visible = false;
dataGridView1.Columns[21].Visible = false;
dataGridView1.Columns[22].Visible = false;
dataGridView1.Columns[23].Visible = false;
dataGridView1.Columns[24].Visible = false;
dataGridView1.Columns[25].Visible = false;
dataGridView1.Columns[26].Visible = false;
dataGridView1.Columns[27].Visible = false;
dataGridView1.Columns[29].Visible = false;
dataGridView1.Columns[30].Visible = false;
dataGridView1.Columns[31].Visible = false;
}

Columns های اضافی رو از توی DGV حذف کرد و پرینت رو انجام داد ؟
این کارو کردم با همین کدی که شما دادید جواب نداد . با یک روش دیگه جواب میداد ولی مشکلش همین بود که راست به چپ پرینت نمیکرد.

pedram.11
سه شنبه 15 اسفند 1391, 15:10 عصر
ببخشید نفهمیدم الان مشکل کجاست؟ حل نشد؟!
توجه کنید کد آخری که دادم 2 جا مشابه همین وجود داره و باید برای هر دوتا این شرط رو بذارید

c-sharp_South
سه شنبه 15 اسفند 1391, 15:46 عصر
نه متاسفانه هنوز حل نشده. :گریه:
سه چهار هفته است الاف همین پرینت گرفتن هستم :عصبانی++:
واقعا هم برام مهمه . کل پروژه رو نوشتم واسه اینکه آخرش پرینت بگیرم :افسرده: پرینت نگیره که نمیشه :متعجب:

pedram.11
سه شنبه 15 اسفند 1391, 15:51 عصر
این برای پرینت بعضی از ستون ها هست، امیدوارم مشکل حل شه
100921

c-sharp_South
سه شنبه 15 اسفند 1391, 17:35 عصر
مــرسی آقای پدارم.
مشکلم کامل کامل رفع شد .
همه چیزش کامله فقط اگه موقع پرینت یک سر تیتر مثل عکس زیر در بالای جدل میومد و جدول در وسط برگه بود کاملا بدون نقص بود.
http://upload.tehran98.com/img1/qpnva545xk0hhq78.png
مرسی بخاطر کمک هاتون :قلب:

c-sharp_South
چهارشنبه 16 اسفند 1391, 03:19 صبح
حقیقت خواستم خودم این دو تا عیبش رو برطرف کنم که باز مزاحم نشم ولی از عصر تا الان ( ساعت 3:51 صبح ) درگیرش هستم و
نتونستم اون دو تا مشکل بالا که گفتم رو بر طرف کنم.اگه ممکنه زحمت این رو هم بکشید تا راحت بشم از دست این پرینت :ناراحت:

c-sharp_South
پنج شنبه 17 اسفند 1391, 17:39 عصر
دوستان کسی نیست این مشکل رو هم حل کنه ؟ :متفکر:

pedram.11
پنج شنبه 17 اسفند 1391, 19:43 عصر
سلام خسته نباشید
توی رویداد pdoc_PrintPage دستورات رو به اینصورت تغیید بدید:
void pdoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
string Header = "بانک اطلاعات اشخاص";
int FontSize = 20;
int StartX = 0, x = 0
, y = 50;
for (int i = this.dataGridView1.Columns.Count - 1; i > -1; i--)
switch (i)
{
case 1:
case 2:
StartX += this.dataGridView1.Columns[i].Width;
break;
}
StartX = e.PageBounds.Width / 2 - StartX / 2;
x = StartX;
System.Drawing.Font HeaderFont =new System.Drawing.Font("Arial", FontSize, FontStyle.Bold,GraphicsUnit.Point);
SizeF Headersize = e.Graphics.MeasureString(Header, HeaderFont);
e.Graphics.DrawString(Header,
HeaderFont, Brushes.Black, new PointF(e.PageBounds.Width / 2 - (Headersize.Width / 2), y));
y += (int)Headersize.Height + 1;
for (int j = this.dataGridView1.Columns.Count - 1; j > -1; j--)
{
switch (j)
{
case 1:
case 2:
Rectangle rect = new Rectangle(x, y,
this.dataGridView1.Columns[j].Width,
this.dataGridView1.ColumnHeadersHeight);
StringFormat sf = new StringFormat();
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Center;
e.Graphics.FillRectangle(Brushes.LightGray, rect);
e.Graphics.DrawRectangle(Pens.Black, rect);
if (this.dataGridView1.Columns[j].HeaderText != null)
{
e.Graphics.DrawString(this.dataGridView1.Columns[j].HeaderText,
SystemFonts.DefaultFont, Brushes.Black, rect, sf);
}

x += rect.Width;
break;
}
}
x = StartX;
y += this.dataGridView1.ColumnHeadersHeight;
foreach (DataGridViewRow row in this.dataGridView1.Rows)
{
if (row.Cells[0].Value != null)
{
for (int j = this.dataGridView1.Columns.Count - 1; j > -1; j--)
{
switch (j)
{
case 1:
case 2:
DataGridViewCell cell; cell = row.Cells[j];
Rectangle rect = new Rectangle(x, y, cell.Size.Width, cell.Size.Height);
StringFormat sf = new StringFormat();
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Center;
e.Graphics.DrawRectangle(Pens.Black, rect);
if (cell.Value != null)
{
e.Graphics.DrawString(cell.Value.ToString(),
SystemFonts.DefaultFont, Brushes.Black, rect, sf);
}
x += rect.Width;
break;
}
}
x = StartX;
y += row.Height;
}
}
}

امیدوارم مشکل حل شه

c-sharp_South
پنج شنبه 17 اسفند 1391, 20:38 عصر
مرسی :قلب:
مشکل کاملا رفع شد.
ممنون