Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用AutoGenerateColumns=true操作GridView中的列有何方法?_Asp.net_Gridview - Fatal编程技术网

Asp.net 使用AutoGenerateColumns=true操作GridView中的列有何方法?

Asp.net 使用AutoGenerateColumns=true操作GridView中的列有何方法?,asp.net,gridview,Asp.net,Gridview,如果AutoGenerateColumns=true,似乎无法操作Gridview的列。以下是我的设想: 我有一个通用的GridView,它根据用户选择的内容显示各种不同LINQ查询的结果。我喜欢AutoGenerateColumns像它应该的那样工作,并且我不必指定所有的BoundField、TemplateField列等等 除此之外,我还根据需要通过编程添加其他列。通过编程添加的列将呈现在自动生成列的左侧。如果我想把它们移到右边呢 GridView.Columns.Count只计算编程的列,

如果AutoGenerateColumns=true,似乎无法操作Gridview的列。以下是我的设想:

我有一个通用的GridView,它根据用户选择的内容显示各种不同LINQ查询的结果。我喜欢AutoGenerateColumns像它应该的那样工作,并且我不必指定所有的BoundField、TemplateField列等等

除此之外,我还根据需要通过编程添加其他列。通过编程添加的列将呈现在自动生成列的左侧。如果我想把它们移到右边呢

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


我是否只需要放弃AutoGeneratedColumns=true,并为每个查询使用边界字段进行布局?我能做些什么吗?

我认为至少在当前的GridView中,不可能控制自动生成的列

通过创建一个继承自GridView的新控件,您可能可以更好地控制列的创建方式,但如果可行的话,我不是舒尔(可能仍然值得研究)

从MSDN文档中:

当AutoGenerateColumns属性 设置为true,是一个自动生成的字段 对象将自动为其创建 数据源中的每个字段。每个 然后,字段在中显示为列 GridView控件的顺序如下: 这些字段显示在数据源中。 此选项提供了一种方便的方法 显示数据中的每个字段 来源;然而,你的能力有限 控制如何自动生成一个 显示或删除生成的列字段 行为

自动生成的绑定列 字段不会添加到列中 收藏

而不是让 GridView控件自动 生成列字段,您可以 按手动定义列字段 设置AutoGenerateColumns 属性设置为false,然后创建 自定义列集合。此外 要绑定列字段,还可以 显示按钮列字段、复选框 框列字段、命令字段和 超链接列字段,图像 字段,或基于您的 自定义模板。更多 有关详细信息,请参见列


您可以对数据绑定进行如下操作:

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

您必须创建自己的标题,但这是非常可行的。

布伦丹的回答提醒我,我有这个谎言。。很适合格式化

网格视图

<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

代码隐藏

<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
子myGridView_行数据绑定(ByVal发送方作为对象,ByVal e作为GridViewRowEventArgs)
如果e.Row.RowType=DataControlRowType.DataRow,则
'以斜体显示数据。
e、 Row.Cells(1.Text=”“&e.Row.Cells(1.Text&“”
如果结束
端接头

如果有人仍然需要答案:
只需使用e.Row.Cells.CountfromRowDataBound

根据接受的答案,可以创建一个字典,将RowDataBound事件中的列名映射到列标记,以允许使用标题名。还显示了一个列交换

Dictionary<string, int> _columnIndiciesForAbcGridView = null;

protected void detailsReportGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (_columnIndiciesForAbcGridView == null)
    {
        int index = 0;
        _columnIndiciesForAbcGridView = ((Table)((GridView)sender).Controls[0]).Rows[0].Cells
            .Cast<TableCell>()
            .ToDictionary(c => c.Text, c => index++);
    }

    // Add a column, this shifts the _columnIndiciesForAbcGridView though.

    TableCell cell = new TableCell();
    cell.Text = "new Column";
    e.Row.Cells.AddAt(2, cell);

    // Swap 0 and 1

    int c0 = _columnIndiciesForAbcGridView["ConfigId"];
    int c1 = _columnIndiciesForAbcGridView["CreatedUtc"];

    string text = e.Row.Cells[c0].Text;
    e.Row.Cells[c0].Text = e.Row.Cells[c1].Text;
    e.Row.Cells[c1].Text = text;
}
Dictionary\u columnIndicatiesforabcGridView=null;
受保护的无效详细信息ReportGridView_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
if(_columnIndicatiesforabcGridView==null)
{
int指数=0;
_ColumnIndicatiesForabcGridView=((表格)((GridView)发件人)。控件[0])。行[0]。单元格
.Cast()
.ToDictionary(c=>c.Text,c=>index++);
}
//添加一列,这会移动_列指示的BCGridView。
TableCell=新的TableCell();
cell.Text=“新列”;
e、 行。单元格。地址(2,单元格);
//交换0和1
int c0=_columnsindicatiesforabcGridView[“ConfigId”];
int c1=_ColumnIndicatiesforAbcGridView[“CreatedUtc”];
字符串text=e.Row.Cells[c0].text;
e、 行.单元格[c0].Text=e.Row.Cells[c1].Text;
e、 行。单元格[c1]。文本=文本;
}