2013-05-08 5 views
0

Я пытаюсь реализовать DataGridView, который имеет меньшую ширину ячейки, чем autosize. Если вы посмотрите очень близко на авторизованную ячейку, вы заметите, что все еще есть пространство, которое не используется для фактического отображения содержимого ячейки.DataGridView - запретить всю перенос слов

Именно поэтому я начал измерять ширину содержимого самостоятельно через TextRenderer, а затем вручную задал ширину столбца.

Первоначальная проблема заключалась в том, что «A» отображалось как «A ...» задолго до того, как ячейка была фактически «заполнена». Причиной этого было cell.Style.WrapMode, установленное на «nonSet». Я был очень рад, что DataGridViewTriState.True действительно работал для этого «A» -пример.

Но теперь я заметил, что если в строке есть несколько слов («A, B»), DataGridView пытается отобразить контент на несколько строк задолго до того, как ячейка будет фактически «заполнена».

То, что я сейчас ищу, - это либо способ удалить это «заполнение» содержимого ячейки, либо полностью подавить перенос слов на определенную ячейку/столбец (= одна строка без обрезания строки).

Кроме того, я должен признать, что на этих строках нет скрытых пробелов, поэтому отделка не имеет никакого эффекта.

Редактировать: Я случайно наткнулся на код некоторых коллег, который, кажется, делает то, что я ищу.

StringFormat format = new StringFormat(StringFormatFlags.NoClip);

В документации сказано, что строки имеют некоторый прямоугольник вокруг них, что больше, чем сама строка. Если прямоугольник выпадает из области записи, строка обертывается. Этот фрагмент кода подавляет поведение (по умолчанию).

Единственная проблема заключается в том, что это решение работает только для рисования строк. Я не нашел возможности назначить объект stringformat для строки.

ответ

0

попробуйте этот код

dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells; 

dataGridView1.DefaultCellStyle.WrapMode to DataGridView1TriState.True 

Надеется, что это помогает вам

+0

Я хочу, чтобы содержимое отображалось в одной строке. Поэтому, к сожалению, автоматизация строк DataGridView не является вариантом. –

0

Вы можете попробовать этот код. Это работает в моем состоянии.

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if (e.Value == null) 
     return; 
    var s = e.Graphics.MeasureString(e.Value.ToString(), dataGridView1.Font); 
    if (s.Width > dataGridView1.Columns[e.ColumnIndex].Width) 
    { 
     using (
    Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor), 
    backColorBrush = new SolidBrush(e.CellStyle.BackColor)) 
     { 
      e.Graphics.FillRectangle(backColorBrush, e.CellBounds); 
      e.Graphics.DrawString(e.Value.ToString(), dataGridView1.Font, Brushes.Black, e.CellBounds, StringFormat.GenericDefault); 
      dataGridView1.Rows[e.RowIndex].Height = (int)(s.Height * Math.Ceiling(s.Width/dataGridView1.Columns[e.ColumnIndex].Width)); 
      e.Handled = true; 
     } 
    } 
} 
Смежные вопросы