我正在使用一个可编辑的 DataGridView Windows 表单来显示一个变量列表,这些变量可以包含不同类型的信息,应用程序未知其格式:路径、字符串、数字等。该表单正在使用源数据绑定(bind)。

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

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

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

你会如何建议这样做?

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

    您总是可以在连续字符串中插入空格,当您使用 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;
        }
    
    }
    

    关于c# - DataGridView 中的自定义 WrapMode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1896596/

    10-13 03:16