用AutoGenerateColumns = true操作GridView中的列的任何方法?

时间:2009-03-26 16:30:51

标签: asp.net gridview

如果AutoGenerateColumns = true,似乎没有办法操纵Gridview的列。这是我的情景:

我有一个通用的GridView,它根据用户选择的内容显示各种不同LINQ查询的结果。我喜欢AutoGenerateColumns的工作方式,我不需要指定所有的BoundField,TemplateField列等......

最重要的是,我还根据需要以编程方式添加其他列。以编程方式添加的列将呈现在自动生成列的左侧。如果我想将它们移到右边怎么办?

GridView.Columns.Count只计算那些编程的,而不是自动生成的,因此我无法重新排列我想要的列。我可以挂钩RowDataBound事件并在必要时“隐藏”某些东西,但我不能重新排列。

我是否只需要放弃AutoGeneratedColumns = true,并为每个查询使用BoundFields进行布局?我有什么可以做的吗?

5 个答案:

答案 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();   
}