我正在使用可编辑的DataGridView
Windows窗体来显示可能包含不同类型信息的变量列表,其格式为应用程序未知:路径,字符串,数字等。表单使用源数据绑定。
有些值可能很长,我希望将它们显示在几行而不是长的,部分可见的行上。原始的WrapMode
在我的情况下是不合适的,因为它将空格字符上的行分开,这些字符并不总是存在:典型示例是由分号分隔的路径或十六进制数字组成的长PATH变量。 / p>
在表单边框而不是在特定字符上包装行会很好,但只有在必要时才这样做会更好。添加其他分割位置而不是空格字符只会更好。
性能方面:网格行数永远不会很高:通常为0到10,在某些极端情况下可能会高达50,并且通常每个的最大长度不应超过4或包裹时5行。所以这不是一个大问题。
你会怎么建议这样做?
CellFormatting
事件,通过插入\r
字符并在解析提交的值时删除它们?这个问题是,单元格似乎有自己的方式在输入模式下重新格式化文本,在两种模式之间切换时改变其方面。可能还有其他副作用尚待发现...... WrapMode
行为?答案 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()
属性上设置这些成员也会为您做同样的事情。