如果内容超过特定宽度,则将数据网格视图单元格更改为多行
Change datagrid view cell to multiline if its content gets more than a specific width
我想通过此代码在 C# 的网格视图中显示数据库数据:
public void Selectalbums()
{
string QuerySelect = "select * from albums_tbl ";
SQLiteCommand cmd = new SQLiteCommand(QuerySelect, cn );
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView2.DataSource = dt;
}
现在当我想在单元格中显示一个大字符串时,它不能完全显示!
我怎样才能做到这一点 :
我为列的单元格设置了最大宽度(例如 250 像素),如果字符串大于 250 像素,它将以多行模式显示!
我在 Whosebug 和其他网站上搜索过它,但我确实注意到找到了解决方案
宽度是 Constante 但当搅拌变大时这个单元格将是多行的
我正在使用。 NET 框架 3.5
我不确定您是如何设置列的最大宽度的。但如果最大宽度等于列的实际宽度,那么答案很简单:
dataGridView1.Columns[columnIndex].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView1.AutoResizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
正如解释的那样here, here, and numerous other places。
如果它们不等价,那么您可能会遇到以下情况:
- 单元格值适合单元格宽度。
- 正常显示。
- 单元格值比单元格宽度长但比最大宽度短。
- 用省略号显示。
- 单元格值比单元格宽度和最大宽度长。
- 显示为 multiline/wrapped 单元格。
处理它非常相似,但在逐个单元格的基础上而不是整列。下面是一个例子:
private int column0MaxWidth = 100;
this.dataGridView1.Columns[0].Width = 55;
this.dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
// For contrast - column 1 contains the same data but is autosized.
this.dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
// On cell formatting, change a cell to single-lined or multilined.
void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DataGridViewTextBoxCell cell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewTextBoxCell;
if (cell != null && e.ColumnIndex == 0)
{
cell.Style.WrapMode = TextRenderer.MeasureText(cell.Value.ToString(), cell.Style.Font).Width > column0MaxWidth ? DataGridViewTriState.True : DataGridViewTriState.NotSet;
}
}
这可以很容易地适用于多列,具体取决于您如何设置每列的最大宽度。
我想通过此代码在 C# 的网格视图中显示数据库数据:
public void Selectalbums()
{
string QuerySelect = "select * from albums_tbl ";
SQLiteCommand cmd = new SQLiteCommand(QuerySelect, cn );
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView2.DataSource = dt;
}
现在当我想在单元格中显示一个大字符串时,它不能完全显示!
我怎样才能做到这一点 :
我为列的单元格设置了最大宽度(例如 250 像素),如果字符串大于 250 像素,它将以多行模式显示! 我在 Whosebug 和其他网站上搜索过它,但我确实注意到找到了解决方案
宽度是 Constante 但当搅拌变大时这个单元格将是多行的
我正在使用。 NET 框架 3.5
我不确定您是如何设置列的最大宽度的。但如果最大宽度等于列的实际宽度,那么答案很简单:
dataGridView1.Columns[columnIndex].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView1.AutoResizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
正如解释的那样here, here, and numerous other places。
如果它们不等价,那么您可能会遇到以下情况:
- 单元格值适合单元格宽度。
- 正常显示。
- 单元格值比单元格宽度长但比最大宽度短。
- 用省略号显示。
- 单元格值比单元格宽度和最大宽度长。
- 显示为 multiline/wrapped 单元格。
处理它非常相似,但在逐个单元格的基础上而不是整列。下面是一个例子:
private int column0MaxWidth = 100;
this.dataGridView1.Columns[0].Width = 55;
this.dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
// For contrast - column 1 contains the same data but is autosized.
this.dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
// On cell formatting, change a cell to single-lined or multilined.
void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DataGridViewTextBoxCell cell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewTextBoxCell;
if (cell != null && e.ColumnIndex == 0)
{
cell.Style.WrapMode = TextRenderer.MeasureText(cell.Value.ToString(), cell.Style.Font).Width > column0MaxWidth ? DataGridViewTriState.True : DataGridViewTriState.NotSet;
}
}
这可以很容易地适用于多列,具体取决于您如何设置每列的最大宽度。