C# 如果当前行宽度已填充,则WinForm换行文本

C# 如果当前行宽度已填充,则WinForm换行文本,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,我的WinForm中有DataGridView。我将AutoSizeColumnsMode设置为Fill,因为如果用户调整窗口大小,我不需要空白 我想要达到的目标。例如,用户在特定单元格中键入一些文本。当文本宽度变为单元格宽度时,文本必须在新行中移动一行。 可能是: |Cell Header| ------------- |text-text | 及 我的列可由用户调整大小。因此: |Cell Header| ------------- |text-text | |more text |

我的WinForm中有DataGridView。我将
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
    设置为
    True
    -ddin无帮助
我究竟怎样才能做到这一点呢

编辑:列设置:

编辑#2:


设置
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;
}