C# 如果当前行宽度已填充,则WinForm换行文本
我的WinForm中有DataGridView。我将C# 如果当前行宽度已填充,则WinForm换行文本,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,我的WinForm中有DataGridView。我将AutoSizeColumnsMode设置为Fill,因为如果用户调整窗口大小,我不需要空白 我想要达到的目标。例如,用户在特定单元格中键入一些文本。当文本宽度变为单元格宽度时,文本必须在新行中移动一行。 可能是: |Cell Header| ------------- |text-text | 及 我的列可由用户调整大小。因此: |Cell Header| ------------- |text-text | |more text |
AutoSizeColumnsMode
设置为Fill
,因为如果用户调整窗口大小,我不需要空白
我想要达到的目标。例如,用户在特定单元格中键入一些文本。当文本宽度变为单元格宽度时,文本必须在新行中移动一行。可能是:
|Cell Header|
-------------
|text-text |
及
我的列可由用户调整大小。因此:
|Cell Header|
-------------
|text-text |
|more text |
|on the new |
|line |
可以这样说:
|Cell Header |
---------------------
|text-text more text|
|on the new line |
我从其他SO答案中尝试的是:
- 将
设置为AutoResizeRowsMode
-没有帮助AllCells
- 将
设置为DefaultCellStyle.WrapMode
-ddin无帮助True
设置
RowsDefaultCellStyle.Wrapmode=true
而不是DefaultCellStyle.Wrapmode=true
我使用了两个网格的默认设置。这是我的设置:
这是密码
除了为列设置换行模式和自动调整大小模式外,还需要为行设置大小模式
public class Model
{
public int Id { get; set; }
public string Text { get; set; }
}
private void Form1_Load(object sender, EventArgs e)
{
var list = new List<Model>
{
new Model{Id = 1, Text = "Lorem ipsum" },
new Model{Id = 2, Text = "Lorem ipsum dolor sit amet." },
new Model{Id = 3, Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." },
};
dataGridView1.DataSource = list;
dataGridView1.Columns["Text"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView1.Columns["Text"].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
}
公共类模型
{
公共int Id{get;set;}
公共字符串文本{get;set;}
}
私有void Form1\u加载(对象发送方、事件参数e)
{
变量列表=新列表
{
新模型{Id=1,Text=“Lorem ipsum”},
新模型{Id=2,Text=“Lorem ipsum dolor sit amet.”,
新模型{Id=3,Text=“Lorem ipsum dolor sit amet,concetetur adipising elit.”,
};
dataGridView1.DataSource=列表;
dataGridView1.Columns[“Text”].AutoSizeMode=DataGridViewAutoSizeColumnMode.Fill;
dataGridView1.Columns[“Text”].DefaultCellStyle.WrapMode=DataGridViewTriState.True;
dataGridView1.AutoSizeRowsMode=DataGridViewAutoSizeRowsMode.AllCells;
}
没有帮助,对不起,我对datagridview和datagridview都使用默认设置。这是我的datagridview和dgv2.RowsDefaultCellStyle.WrapMode=DataGridViewTriState.True在代码上的唯一区别。正如您所建议的,我已经在
Load
nethod中对其进行了测试。还有问题吗(可能问题在于我的列是预定义的?在您的示例中,它们不是预定义列与新列的唯一区别,而是应用于列的设置。您始终需要在干净的环境中测试您共享的解决方案。请参阅屏幕截图,它正按预期工作。请看一看请(使用您的代码进行测试)无需担心,无论出于何种原因,如果您想自定义单元格的渲染,如果通过更改属性无法满足要求,您可以处理CellPainting
事件并根据自定义逻辑渲染单元格。您可以找到。
public class Model
{
public int Id { get; set; }
public string Text { get; set; }
}
private void Form1_Load(object sender, EventArgs e)
{
var list = new List<Model>
{
new Model{Id = 1, Text = "Lorem ipsum" },
new Model{Id = 2, Text = "Lorem ipsum dolor sit amet." },
new Model{Id = 3, Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." },
};
dataGridView1.DataSource = list;
dataGridView1.Columns["Text"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView1.Columns["Text"].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
}