DataGridView中的自定义WrapMode

时间:2009-12-13 14:00:29

标签: c# winforms .net-3.5 datagridview

我正在使用可编辑的DataGridView Windows窗体来显示可能包含不同类型信息的变量列表,其格式为应用程序未知:路径,字符串,数字等。表单使用源数据绑定。

有些值可能很长,我希望将它们显示在几行而不是长的,部分可见的行上。原始的WrapMode在我的情况下是不合适的,因为它将空格字符上的行分开,这些字符并不总是存在:典型示例是由分号分隔的路径或十六进制数字组成的长PATH变量。 / p>

在表单边框而不是在特定字符上包装行会很好,但只有在必要时才这样做会更好。添加其他分割位置而不是空格字符只会更好。

性能方面:网格行数永远不会很高:通常为0到10,在某些极端情况下可能会高达50,并且通常每个的最大长度不应超过4或包裹时5行。所以这不是一个大问题。

你会怎么建议这样做?

  • 处理CellFormatting事件,通过插入\r字符并在解析提交的值时删除它们?这个问题是,单元格似乎有自己的方式在输入模式下重新格式化文本,在两种模式之间切换时改变其方面。可能还有其他副作用尚待发现......
  • 或者有没有办法修改我忽略的WrapMode行为?

2 个答案:

答案 0 :(得分:2)

你总是可以在run-on字符串中插入空格,当你使用gridview时我不知道任何其他选项,格式在那里有点限制。

如果你真的需要在固定宽度的单元格中显示它,你可以尝试这样的东西:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    string cellTxt = e.Row.Cells[1].Text;
    int lengthBeforeBreak = 25;
    if (e.Row.RowType == DataControlRowType.DataRow && cellTxt.Length > lengthBeforeBreak)
    {
        int curPos = 0;
        for (int i = 0; i < Decimal.Round((cellTxt.Length/lengthBeforeBreak),0); i++)
   {
            if (cellTxt.IndexOf(" ", curPos, lengthBeforeBreak) == -1)
            {
                cellTxt = cellTxt.Insert(curPos+lengthBeforeBreak, " ");
            }
            curPos += lengthBeforeBreak + 1;
   }
        e.Row.Cells[1].Text = cellTxt;
    }

}

答案 1 :(得分:0)

我做同样的事情但没有绑定,只需设置以下内容:

this.dataGridView1.Rows[this.RowIndex].Height = 100;
var style = row.Cells[this.ColumnIndex].Style;
style.WrapMode = DataGridViewTriState.True;
style.Alignment = DataGridViewContentAlignment.TopLeft;

也许在DefaultCellStyle之前在列的DataBind()属性上设置这些成员也会为您做同样的事情。