-2

.NET DataGrid コントロールには、データ ソースが変更された直後にバインドされたデータ項目ごとに 1 回発生する AutoGeneratingColumn イベントがあります。次のように、テンプレートで特定の列を定義できるため、これは便利です。

<Columns>
        <asp:HyperLinkField DataNavigateUrlFields="ID" DataNavigateUrlFormatString="ww{0}" DataTextField="ID" DataTextFormatString="{0}" HeaderText="ID" />
</Columns>

次に、列がデータ ソースから自動生成されるときに、同じ列が複製されないようにします。この例では、ID 列が次のように自動生成されないようにすることができます。

Private Sub DG_AutoGeneratingColumn(ByVal sender As Object, ByVal e As DataGridAutoGeneratingColumnEventArgs)
    Dim headername As String = e.Column.Header.ToString()
    If headername = "ID" Then
        e.Cancel = True
    End If
End Sub

私の質問は、GridView コントロールで同様の機能を実現できるかどうかです。

詳細

gridview のデータ ソースは DataTable オブジェクトであり、次のようにバインドしています。

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

DataTable の列数はさまざまであるため、AutoGenerateColumns を使用すると非常に便利です。

4

1 に答える 1

0

これを行うには、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;
    }
}
于 2012-10-28T22:10:29.573 に答える