当前位置: 首页 > 编程语言 > C#

确保dataGridView列中的文本换行分享

时间:2023-04-10 23:48:10 C#

C#学习教程:确保DataGridView列中的文本换行当我在dataGridView中写长文本时,它会显示带有省略号的缩短版本,因为该列不够宽,无法显示整个字符串。|textdsadasda...|想让dataGridView在下一行显示这段文字,或者把文字换行怎么办?|textdsadasda||达斯达萨|(上一行的续)如何做到这一点?可以处理单元格绘制事件可以帮助你vars=e.Graphics.MeasureString(e.Value.ToString(),dataGridView1.Font);如果(s.Width>dataGridView1.Columns[e.ColumnIndex].Width){使用(BrushgridBrush=newSolidBrush(this.dataGridView1.GridColor),backColorBrush=newSolidBrush(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;}}}尝试通过重新绘制来设置单元格,这是没有必要的来重新发明轮子吧。相反,只是:在那之后,如果列中没有足够的空间,文本应该换行到下一行。您可以尝试将DataGridView.DefaultCellStyle.WrapMode设置为DataGridViewTriState.True我发现@DeveloperX的回答非常有用,但有几个小问题:如果有多个单元格需要换行,它会导致一些行闪烁,一些单元格最后单元格的行丢失或被截断(如果文本中不能包含长词,就会发生这种情况)它还会导致单元格边框丢失(但这取决于网格/单元格边框设置)。我对@DeveloperX代码进行了修改以解决此问题并提出以下内容:privateint_rowMaxHeight=0;私人int_rowDefaultHeight=0;privatevoiddataGridView1_CellPainting(objectsender,DataGridViewCellPaintingEventArgse){if(e.Value==null||e.RowIndex_rowMaxHeight)?(int)Math.Ceiling(sWrapped.Height):_rowMaxHeight;//文本在行内生成。e.Graphics.DrawString(e.Value.ToString(),dataGridView1.Font,fontBrush,e.CellBounds,StringFormat.GenericDefault);e.Handled=true;}}if(e.ColumnIndex==dataGridView1.ColumnCount-1&&_rowMaxHeight>0&&_rowMaxHeight!=dataGridView1.Rows[e.RowIndex].Height){//仅在最后一个单元格设置高度,当整行有被//绘制,有助于避免当不止一行//需要换行时闪烁。dataGridView1.Rows[e.RowIndex].Height=(_rowMaxHeight>_rowDefaultHeight)?_rowMaxHeight:_rowDefaultHeight;请注意,此代码还有一个问题尚未解决:文本不再在单元格内垂直居中!设置这个值有助于实现想要的显示dataGridView1.AutoSizeRowsMo??de=DataGridViewAutoSizeRowsMo??de.DisplayedCells;除了设置WrapMode=DataGridViewTriState.True;我同意这个问题的答案只是在单元格上设置WordWrap并将在这种情况下添加它我需要根据每个单元格中的数据动态更改颜色和字体样式。最初我认为由于需要不同的文本颜色,我无法弄清楚如何将DrawString包含在CellPainting事件中。但是,最后我只是在CellPainting事件中设置了Cell.Style属性,然后没有设置e.Handled=true就退出了事件。这样,网格的绘制事件使用我为每个单元格设置的样式并正确包装文本。例如:以上是C#学习教程:保证dataGridView列中的文本将所有分享的内容包裹起来。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——datagrid1[e.ColumnIndex,e.RowIndex].Style.BackColor=Color.Green;本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: