如果AutoGenerateColumns = true,似乎没有办法操纵Gridview的列。这是我的情景:
我有一个通用的GridView,它根据用户选择的内容显示各种不同LINQ查询的结果。我喜欢AutoGenerateColumns的工作方式,我不需要指定所有的BoundField,TemplateField列等......
最重要的是,我还根据需要以编程方式添加其他列。以编程方式添加的列将呈现在自动生成列的左侧。如果我想将它们移到右边怎么办?
GridView.Columns.Count只计算那些编程的,而不是自动生成的,因此我无法重新排列我想要的列。我可以挂钩RowDataBound事件并在必要时“隐藏”某些东西,但我不能重新排列。
我是否只需要放弃AutoGeneratedColumns = true,并为每个查询使用BoundFields进行布局?我有什么可以做的吗?
答案 0 :(得分:3)
您可以对数据绑定的内容进行操作:
Private Sub MyGrid_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles Me.RowDataBound
If Me.AutoGenerateColumns = True Then
If e.Row.RowType = DataControlRowType.DataRow Then
e.row.cells.add(some code here to add your special column)
End If
End If
End Sub
你必须创建自己的标题,但它非常可行。
答案 1 :(得分:1)
我认为不可能控制自动生成的列,至少使用当前的GridView。
通过创建一个继承自GridView的新控件,您可能对列的创建方式有了更多的控制,但如果可行的话,我不会感到害羞(可能仍值得研究)
来自MSDN文档:
当AutoGenerateColumns属性时 设置为true,即AutoGeneratedField 对象是自动创建的 数据源中的每个字段。每 然后,字段显示为列中的 GridView控件按顺序排列 字段显示在数据源中。 此选项提供了一种方便的方法 显示数据中的每个字段 资源;但是,你有限 如何自动控制 生成的列字段显示或 的行为。
自动生成绑定列 字段未添加到列 采集。
而不是让 GridView自动控制 生成列字段,即可 手动定义列字段 设置AutoGenerateColumns 属性为false然后创建一个 自定义列集合。此外 要绑定列字段,您也可以 显示按钮列字段,检查 框列字段,命令字段,a 超链接列字段,图像 字段,或基于您的列字段 拥有自定义模板。更多 信息,请参阅列。
答案 2 :(得分:1)
Brendan的回答提醒我,我躺在那里..很适合格式化。
<强> GridView的强> ...
<asp:GridView .... OnRowDataBound="myGridView_RowDataBound">
代码背后 ...
Sub myGridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
' Display the data in italics.
e.Row.Cells(1).Text = "<i>" & e.Row.Cells(1).Text & "</i>"
End If
End Sub
答案 3 :(得分:1)
如果有人还需要回答: 只需使用 RowDataBound 中的 e.Row.Cells.Count 。
答案 4 :(得分:0)
根据接受的答案,可以创建一个字典,以便在RowDataBound事件中从列名映射到列指示,以允许使用标题名称。此外,还显示了列交换。
public MyString(String sent)
{
origional = new String(sent);
sequence = origional.toCharArray();
}