Asp.net Gridview自动生成列事件?

Asp.net Gridview自动生成列事件?,asp.net,gridview,datagrid,Asp.net,Gridview,Datagrid,.NET DataGrid控件有一个AutoGeneratingColumn事件,该事件在数据源更改后立即为每个绑定的数据项触发一次。这很有用,因为您可以在模板中定义某些列,如下所示: <Columns> <asp:HyperLinkField DataNavigateUrlFields="ID" DataNavigateUrlFormatString="ww{0}" DataTextField="ID" DataTextFormatString="{0}" H

.NET DataGrid控件有一个AutoGeneratingColumn事件,该事件在数据源更改后立即为每个绑定的数据项触发一次。这很有用,因为您可以在模板中定义某些列,如下所示:

<Columns>
        <asp:HyperLinkField DataNavigateUrlFields="ID" DataNavigateUrlFormatString="ww{0}" DataTextField="ID" DataTextFormatString="{0}" HeaderText="ID" />
</Columns>
我的问题是,是否可以通过GridView控件实现类似的功能

详细信息

gridview的数据源是一个DataTable对象,我是这样绑定的:

    GridView1.DataSource = results.Tables("Vitals")
    GridView1.DataBind()

我的DataTable中的列数会有所不同,这就是为什么使用AutoGenerateColumns对我来说非常方便。

要做到这一点,您应该处理RowCreated事件并编写如下内容:

private List<int> hideColumnsIndexes = new List<int>(); 

protected void Page_Load(object sender, EventArgs e)
{
    hideColumnsIndexes.Clear();
}

protected void GridView1_OnRowCreated(object sender, GridViewRowEventArgs e)
{
    //Find indexes
    if (e.Row.RowType == DataControlRowType.Header)
    {
        for (int i = 0; i < e.Row.Cells.Count; i++ )
        {
            if (e.Row.Cells[i].Text == "Id")
            {
                hideColumnsIndexes.Add(i);
            }

            //Add more columns to hide
        }
    }

    //Hide cells
    foreach (var index in hideColumnsIndexes)
    {
        e.Row.Cells[index].Visible = false;
    }
}
private List hideColumnsIndexes=new List();
受保护的无效页面加载(对象发送方、事件参数e)
{
hideColumnsIndexes.Clear();
}
受保护的无效GridView1_OnRowCreated(对象发送方,GridViewRowEventArgs e)
{
//查找索引
if(e.Row.RowType==DataControlRowType.Header)
{
for(int i=0;i
谢谢您的回答,Andrei。是的,我已经在使用类似的东西(只是我在使用RowDataBound事件),但是我希望有一种不太老练的方法来防止列被添加到数据源中,而不是在列被添加到数据源中后简单地为每一行隐藏它。我会再等一天,如果没有答案,我会接受这个。
private List<int> hideColumnsIndexes = new List<int>(); 

protected void Page_Load(object sender, EventArgs e)
{
    hideColumnsIndexes.Clear();
}

protected void GridView1_OnRowCreated(object sender, GridViewRowEventArgs e)
{
    //Find indexes
    if (e.Row.RowType == DataControlRowType.Header)
    {
        for (int i = 0; i < e.Row.Cells.Count; i++ )
        {
            if (e.Row.Cells[i].Text == "Id")
            {
                hideColumnsIndexes.Add(i);
            }

            //Add more columns to hide
        }
    }

    //Hide cells
    foreach (var index in hideColumnsIndexes)
    {
        e.Row.Cells[index].Visible = false;
    }
}