PDA

View Full Version : سوال: Right To Left کردن فقط یک ستون از دیتا گرید



پرستو پارسایی
چهارشنبه 26 آذر 1399, 15:43 عصر
با سلام آیا Right to left کردن یک ستون خاص دیتا گرید ممکنه؟ در حال حاضر دیتاگرید ویو مد نظرم در حال yes هست , و در یک ستون خاص نیاز به فرمت لاتین دارم ممنون میشم دوستان در صورت اطلاع پاسخ دهید سپاسگزارم

the king
چهارشنبه 26 آذر 1399, 17:08 عصر
با سلام آیا Right to left کردن یک ستون خاص دیتا گرید ممکنه؟ در حال حاضر دیتاگرید ویو مد نظرم در حال yes هست , و در یک ستون خاص نیاز به فرمت لاتین دارم ممنون میشم دوستان در صورت اطلاع پاسخ دهید سپاسگزارم
صد البته.
ولی من با توضیحات شما دو جور مساله متفاوت می بینم با دو راهکار متفاوت.
یک زمانی هست که محتویات همه سطر ها شبیه Column3 Column2 Column1 ئه، چون فرضا RightToLeft ئه Yes ئه، ولی شما می خواهید در یک سطر خاص در جهت مخالف Column1 Column2 Column3 نمایش داده بشه.
که میتونه با فرمت بندی خانه ها (کد نویسی در رخداد DataGridView.CellFormatting (https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview.cellformatting?v iew=net-5.0)) انجام بشه و انجامش هم ربطی به دستکاری روال رسم نداره. فقط محتویات فرمت بندی شده خانه ها که میخواد به روال رسم ارسال بشه جابجا می کنیم تا مقداری که فرضا قرار بود داخل ستون Column1 نمایش داده بشه در ستون Column3 نمایش داده بشه.

اما در مساله دوم اساس میخواهید یک تغییر در خود روال رسم بدهید، فرضا متن یک خانه یا خانه های یک سطر خاص موقع رسم RightToLeft نباشه.
موقع رسم خانه های DataGridView رخداد DataGridView.CellPainting (https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview.cellpainting?vie w=net-5.0) میتونه بجای رسم پیشفرض که فرضا بر اساس اون RightToLeft بوده رسم اختصاصی خودتون رو انجام بده که مثلا هیچ اعتنایی به RightToLeft نداشته باشه و چپ به راست رسم کنه.

پرستو پارسایی
چهارشنبه 26 آذر 1399, 19:40 عصر
ممنونم از پاسخ شما . من در این دیتا گرید در یک ستون از فرمت ساعت استفاده کردم و الان با توجه به اینکه دیتا گریدم ReadOnly هست و نیاز به Edit نداره قصد دارم بجای نمایش فارسی در درون سلول مورد نظر از نمایش بصورت لاتین استفاده بشه ممنون میشم به این مورد اشاره بفرمایید سپاسگزارم

the king
چهارشنبه 26 آذر 1399, 22:46 عصر
ممنونم از پاسخ شما . من در این دیتا گرید در یک ستون از فرمت ساعت استفاده کردم و الان با توجه به اینکه دیتا گریدم ReadOnly هست و نیاز به Edit نداره قصد دارم بجای نمایش فارسی در درون سلول مورد نظر از نمایش بصورت لاتین استفاده بشه ممنون میشم به این مورد اشاره بفرمایید سپاسگزارم

این مثال کوچک رو اجرا کنید :

Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
DataGridView1.Columns.Clear()
DataGridView1.Columns.Add("ColumnTime", "Time")
DataGridView1.Columns.Add("ColumnMode", "Mode")
DataGridView1.Rows.Add("12:34", "Farsi")
DataGridView1.Rows.Add("12:34", "Latin")
DataGridView1.Rows.Add("12:34", "Arabic")
End Sub

Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
If e.RowIndex >= 0 AndAlso e.ColumnIndex = 0 Then
e.Handled = True
e.Paint(e.ClipBounds, e.PaintParts And (DataGridViewPaintParts.All Xor DataGridViewPaintParts.ContentForeground))
Dim format = New StringFormat(StringFormat.GenericDefault)
Select Case e.RowIndex
Case 0
format.SetDigitSubstitution(1065, StringDigitSubstitute.National)
Case 1
format.SetDigitSubstitution(1033, StringDigitSubstitute.National)
Case 2
format.SetDigitSubstitution(1025, StringDigitSubstitute.National)
End Select
Dim selected = (e.State And DataGridViewElementStates.Selected) = DataGridViewElementStates.Selected
Using brush = New SolidBrush(IIf(selected, e.CellStyle.SelectionForeColor, e.CellStyle.ForeColor))
e.Graphics.DrawString(e.FormattedValue, e.CellStyle.Font, brush, e.CellBounds, format)
End Using
End If
End Sub
End Class

پرستو پارسایی
پنج شنبه 27 آذر 1399, 11:29 صبح
از پاسخگویی دقیق شما بسیار سپاسگزارم . عالی و آموزنده . مشکل Right to left حل شد ولی فونت همان سلول در حالت Top_Right قرار گرفت ، در صورتی که من در حالت MiddleLeft قرار داده بودم ممنونم از پاسخگویی شما