我有一个报告页面,可以显示两个不同的报告。所以我的aspx页面上有一个没有列的GridView。我在按钮单击事件处理程序中向GridView添加了4个BoundFields。第一列是我需要为其中一个报告设置宽度的列(下面我用来添加此列的代码)。
gvReport.Columns.Clear();
BoundField bf1 = new BoundField();
...
if (ddReportType.SelectedValue == "full") {
bf1.HeaderText = "Facility";
bf1.DataField = "Facility";
bf1.ItemStyle.Wrap = true;
bf1.ItemStyle.Width = 150;
bf1.Visible = true;
gvReport.Columns.Add(bf1);
...
问题是这一列中有一行有SHA512哈希。由于在它的中间没有空间,gridview不会包装它(我认为这是正在发生的事情,无论如何)!所以我想我会在OnRowDataBound事件中捕获这一列并在哈希中间添加一个空格以便它将包装,但我无法弄清楚如何引用BoundField。没有身份证。有没有人有建议?是关于如何引用BoundField,还是以其他方式使其显示得很好?
我最初在aspx文件中有列并尝试使用:
gvReport.Columns [0] .ItemStyle.Width = 150;
gvReport.Columns [0] .ItemStyle.Wrap = true;
但这也不起作用。这非常令人沮丧!
答案 0 :(得分:1)
所以我们选择了Plan C.我从未弄清楚如何引用BoundField。我们通过在标记中创建两个GridView并只更改哪个是可见的来解决这个问题。为了解决不会换行的文本的问题,我们在OnRowDataBound事件处理程序中捕获它并检查文本的长度。我们只是在中间插入一个空间,瞧!它结束了!
答案 1 :(得分:0)
BoundField是一个错误的东西。它更像是一个定义。稍后,在绑定或创建行时,您将处理行,单元格和数据项。
你可以这样做:
protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string value = e.Row.Cells[1].Text;
if (!string.IsNullOrEmpty(value))
e.Row.Cells[1].Text = value.Insert(value.Length / 2, " ");
}
}
其中Cell [1]是包含长值的列。在同一个地方,你可以使用e.Row.DataItem来获取实际数据,但是你需要知道它的类型。
您可以创建模板字段并绑定到表达式或使用其子数据绑定事件来执行相同操作。
此外,如果您使用的是DataSet,则可以设置计算字段并绑定到该字段。总之...