RTL 言語のテキストにはこれが必要なため、RightToLeft プロパティを true (RightToLeft.Yes) に設定した WindowsForms アプリに DataGridView があります。一方、数値は左から右に記述する必要があります。
しかし、ご存知かもしれませんが、個々の列に対して RightToLeft の異なる値を設定することはできません。ほとんどのデータ アプリで使用されていると考えられているこのような重要なコントロールが、国際的な目的でこの基本機能をサポートしていないのはなぜでしょうか。これは必須です
とにかく、編集する列の名前/データタイプに基づいて、EditingControlShowing イベントで RightToLeft プロパティを変更しようとしています。
private void grid1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
TextBox t = e.Control as TextBox;
if (t == null) return; //it is not a textbox editing column
DataGridViewColumn col = grid1.Columns[grid1.CurrentCell.ColumnIndex];
string columnName = col.Name;
if (Utility.IsNumericType(col.ValueType) || columnName.Contains("تاریخ")) //render as left-to-right
t.RightToLeft = RightToLeft.No; //setting RightToLeft property causes that cell values do not update after first cell edit!!!
else
t.RightToLeft = RightToLeft.Yes;
}
しかし、これは期待どおりに機能しません。EditingControl の RightToLeft プロパティを設定すると、セルの値を編集しているときに、最初のセルの編集後に、変更するたびに次のセルの値が元の値に戻ります。
なぜこれが起こるのか理解できませんか?