PDA

View Full Version : قرار دادن یک خانه DataGridView در حالت Right-to-Left



Jalil61
سه شنبه 27 شهریور 1386, 08:52 صبح
سلام
چطور میشه در DataGridView یک ستون خاص و یا یک Cell خاص رو در حالت Right-to-Left قرار داد، البته در صورتی که مقدار در قسمت Property مقدار Right-to-left برابر با False باشه.
هدف اصلی من از این کار اینه که در هر ستون یا خانه ای از DataGridView که خواستم بتونم شماره ها رو به فارسی و یا انگلیسی نمایش بدم. اگه روش دیگه ای هم هست بگید.
تشکر

hesam_hma
سه شنبه 27 شهریور 1386, 22:41 عصر
DataGridView1.Rows.Item(0).DefaultCellStyle.Alignm ent = DataGridViewContentAlignment.MiddleLeft

PC2st
سه شنبه 27 شهریور 1386, 23:08 عصر
فکر نمیکنم چنین قابلیتی وجود داشته باشه که یک سلول خاص رو Right to Left کنه. (مگر اینکه خودتون یک کلاس رو به ارث برسونید)

omidmehraban
جمعه 30 شهریور 1386, 01:29 صبح
با کد زیر میشه این کارو برای سلول 0 و 0 کرد:


DataGridView1.Item(0,0).Style.Alignment=DataGridVi ewContentAlignment.MiddleRight
البته ّAlignment با Right to Left فرق داره اما کمی کاره اونو می کنه

Jalil61
یک شنبه 01 مهر 1386, 08:47 صبح
امید جان همان طور که خودت هم اشاره کردی Alignment با Right-to-left فرق داره و با این کار مشکل نمایش اعداد بصورت شماره های فارسی حل نمیشه.
از PC2st.ir هم خواهش می کنم در مورد پیشنهادشون بیشتر توضیح بدن و اگه امکانش هست با یک نمونه مسئله رو روشنتر کنند.
با تشکر

hesam_hma
یک شنبه 01 مهر 1386, 21:25 عصر
اگه می خوای اعداد فارسی باشه از فونتهای B استفاده کنید

PC2st
یک شنبه 01 مهر 1386, 22:56 عصر
منظور اینه که باید برای تعیین استایل از کلاس DataGridViewCell یا کلاسهای فرزند آن مثلا DataGridViewTextBoxCell به ارث برسونید.
برای این منظور یک مثال کوچک (هر چند ناقص) در نحوه RightToLeft کردن میزنم:
یک پروژه Windows Application ایجاد کنید و یک کنترل DataGridView1 بهش اضافه کنید.
به قسمت ویرایش کدها بروید و کدها رو به شکل زیر تغییر بدید:


Public Class Form1
Public Class TextBoxRtlCell
Inherits DataGridViewTextBoxCell
Protected Overrides Sub Paint(ByVal graphics As System.Drawing.Graphics, ByVal clipBounds As System.Drawing.Rectangle, ByVal cellBounds As System.Drawing.Rectangle, ByVal rowIndex As Integer, ByVal cellState As System.Windows.Forms.DataGridViewElementStates, ByVal value As Object, ByVal formattedValue As Object, ByVal errorText As String, ByVal cellStyle As System.Windows.Forms.DataGridViewCellStyle, ByVal advancedBorderStyle As System.Windows.Forms.DataGridViewAdvancedBorderSty le, ByVal paintParts As System.Windows.Forms.DataGridViewPaintParts)
If Me.Selected Then
graphics.FillRectangle(Brushes.DarkBlue, cellBounds)
Else
graphics.FillRectangle(Brushes.White, cellBounds)
End If
graphics.DrawRectangle(Pens.Blue, cellBounds)
cellBounds.Offset(3, 3)
Dim myText As String = CType(formattedValue, String)
TextRenderer.DrawText(graphics, myText, cellStyle.Font, cellBounds, cellStyle.ForeColor, cellStyle.BackColor, TextFormatFlags.RightToLeft)
End Sub
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim column As DataGridViewColumn
column = New DataGridViewColumn(New TextBoxRtlCell())
column.ValueType = GetType(String)
Me.DataGridView1.Columns.Add("A", "A")
Me.DataGridView1.Columns.Add(column)
End Sub
Private Sub DataGridView1_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlSho wingEventArgs) Handles DataGridView1.EditingControlShowing
If (Me.DataGridView1.CurrentCell.ColumnIndex = 1) Then
e.Control.RightToLeft = Windows.Forms.RightToLeft.Yes
End If
End Sub
End Class

که ستون دوم بعنوان ستونی راست به چپ و ستون اول بصورت چپ به راست خواهد بود.
که ستون راست به چپ توسط کلاس TextBoxRtlCell ایجاد شده و به دیتاگریدویو اضافه شده. متن خودتون رو وارد کنید و میبینید که راست به چپ خواهد بود.
همانطور که میبینید این مثال خیلی خیلی ناقصه... و این نحوه پیاده سازی که من انجام دادم، اصلا جالب نیست، ولی خودتون میتونید روش مناسبی رو برای اینکار انتخاب کنید.

hamed_bostan
دوشنبه 02 مهر 1386, 00:04 صبح
فونت های B منظورتون فونت هایی هست که با B شروع میشن؟

yavari
چهارشنبه 04 مهر 1386, 09:24 صبح
سلام

چجوری میتونم این کارو برا ستونی که بایند شده انجام بدم ؟

ممنون

PC2st
چهارشنبه 04 مهر 1386, 16:45 عصر
برای ستونی که بایند شده، باید خاصیت AutoGenerateColumns از DataGridView رو روی false تنظیم کنید و خودتون ستونها رو به DataGridView اضافه کنید (که میتونید از کلاسی که در این تاپیک ذکر شده هم استفاده کنید) بعدش این ستونهایی که به DataGridView اضافه کردید، باید خاصیت DataPropertyName از ستونها رو به نام یک فیلد از منبع داده مشخص کنید.

شاپرک
چهارشنبه 23 شهریور 1390, 15:15 عصر
ميدونم تاپيك قديميه اما محض اطلاع دوستاني كه جستجو ميكنن و به اين تاپيك ميرسن:


Private Sub DG_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEvent Args) Handles DG.CellPainting
If (e.ColumnIndex = 1 And e.RowIndex >= 0) Then
e.PaintBackground(e.CellBounds, True)
TextRenderer.DrawText(e.Graphics, e.FormattedValue.ToString(), _
e.CellStyle.Font, e.CellBounds, e.CellStyle.ForeColor, _
TextFormatFlags.RightToLeft)
e.Handled = True
End If
End Sub

aisana
جمعه 01 مهر 1390, 11:33 صبح
ميدونم تاپيك قديميه اما محض اطلاع دوستاني كه جستجو ميكنن و به اين تاپيك ميرسن:


Private Sub DG_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEvent Args) Handles DG.CellPainting
If (e.ColumnIndex = 1 And e.RowIndex >= 0) Then
e.PaintBackground(e.CellBounds, True)
TextRenderer.DrawText(e.Graphics, e.FormattedValue.ToString(), _
e.CellStyle.Font, e.CellBounds, e.CellStyle.ForeColor, _
TextFormatFlags.RightToLeft)
e.Handled = True


End If
End Sub


چطوری تو قسمت TextFormatFlags.RightToLeft میتونم right to left رو به yes یا no تنظیم کنم؟

مرتضی تقدمی
جمعه 01 مهر 1390, 12:59 عصر
http://barnamenevis.org/showthread.php?306197-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-right-to-left-%DB%8C%DA%A9%DB%8C-%D8%A7%D8%B2-%D8%B3%D8%AA%D9%88%D9%86%D9%87%D8%A7%DB%8C-Datagridview

nowar1352
یک شنبه 08 مرداد 1391, 13:02 عصر
دوست عزيز اگر بخواهيم RightToLeft يه ستون و تغيير بديم چكاربايد كنيم؟