Измените три точки (эллипсы) (...) на пользовательские символы в VB.Net DataGridView, когда содержимое ячейки усекается - PullRequest
3 голосов
/ 16 декабря 2010

Я занимаюсь разработкой проекта в VB.Net и использую гуджаратские шрифты (не Unicode).

Я разместил DaraGridView (DGV) и отображаю данные, хранящиеся в базе данных в DGV.

В DGV, если содержимое ячейки урезано, DGV показывает эллипсы (три точки) (...); но так как шрифт установлен на гуджаратский шрифт, он отображает гуджаратский алфавит «ઈઈઈ» вместо «...», потому что гуджаратский символ «ઈ» закодирован с английским «.» (точка) символ.

Гуджаратским шрифтом "." может быть сгенерирован с английским символом "P".

Итак, как я могу изменить эллипсы на английский символ "P"? ИЛИ Как мне полностью удалить эллипсы?

Я нашел похожее решение от berc во вторник, 31 августа 2010 г., 13:33: http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/95c8963f-9832-4e2d-b057-3590afe3b65d

но я не уверен, что это идеальный и / или единственный способ сделать это, И он действительно будет работать или нет. Если решение по вышеуказанной ссылке на MSDN в порядке, сколько кода из него я могу удалить, и / или мне понадобится больше кода, чтобы он работал полностью?

Ответы [ 2 ]

3 голосов
/ 16 декабря 2010

Вы можете переопределить событие CellFormatting:

Private Sub DGV_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DGV.CellFormatting
    'Check for null values
    If (e Is Nothing) OrElse (e.Value Is Nothing) Then Return
    'Grab the current cell
    Dim C = DirectCast(sender, DataGridView).Rows(e.RowIndex).Cells(e.ColumnIndex)
    'I'm not sure if its my testbed or what but occasionally I was getting NULL here so check for that
    If (C Is Nothing) Then Return

    'Measure the string, if it fits, use it as is
    If TextRenderer.MeasureText(e.Value.ToString(), C.InheritedStyle.Font).Width <= C.Size.Width Then Return

    'This is our text that we'd like to append to the end of the string
    Dim RepText = "PPP"
    'This is our text that we'll slowly take off the last character of until it fits
    Dim NewText As String = e.Value

    'Loop until our text fits. NOTE: You may have to take into account cell padding here, too
    Do While TextRenderer.MeasureText(NewText & RepText, C.InheritedStyle.Font).Width >= C.Size.Width
        'Chop the last character off and repeat
        NewText = NewText.Substring(0, NewText.Length - 2)
    Loop

    'Set the new cell's value
    e.Value = NewText & RepText
    'Flag that we've changed the cell's text
    e.FormattingApplied = True
End Sub
0 голосов
/ 17 декабря 2010

Ничего себе, все работало нормально, спасибо:)

Теперь в DGV есть несколько столбцов с английским шрифтом. Итак, я вставил следующий код, чтобы не форматировать определенные ячейки

 'Grab the current cell

 Select Case e.ColumnIndex
 Case 0, 2, 3, 4, 14, 16, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28
  Return
 End Select

 Dim C = DirectCast(sender, DataGridView).Rows(e.RowIndex).Cells(e.ColumnIndex)
...