5

GridView割り当てた一意の識別子を使用して、コードビハインドの列の表示を制御できるようにしたいと思います。このようにして、表示および非表示にする列を動的に決定でき、新しい列を追加するたびにコードを変更する必要がありません。

これを行うために私が考えた最善の方法は、HeaderTextof列を一意の識別子として使用し、のすべてのDataControlFieldオブジェクトをループしGridView.Columnsて、要求されたHeaderTextを検索する関数を作成することです。

DataControlFieldオブジェクトがのようにアクセスできる割り当て可能なIDプロパティを持つことができなかったのは私には奇妙に思えますGridView.Columns["AssignableID"]。このように機能するIDプロパティを持つことができないプログラム上の理由はありDataControlFieldますか、それとも単に存在しない機能ですか?

私の質問は、列を隠す問題の実際の解決策よりも、それが存在しない理由に関するものですが、誰かがこれを達成するためのより良い方法を持っているなら、私はそれをいただければ幸いです。

リクエストごとに、HeaderTextによる検索の例を次に示します。

protected DataControlField GetColumn(GridView grid, string columnName)
{
    foreach (DataControlField column in grid.Columns)
    {
        if (column.HeaderText == columnName)
        {
            return column;
        }
    }
    return null;
}
4

2 に答える 2

2

まず、私はあなたと一緒にいます。私もこのようなコードだと思います

myGridView.Columns[0].Visible = false;

(疑似コード) よりも読みにくく、エラーが発生しやすい:

myGridView.Columns["UserName"].Visible = false;

したがって、なぜIDプロパティがないのかという質問は理にDataControlFieldかなっています。

私がすでにコメントしたように:

明示的に宣言された列フィールドは、自動生成された列フィールドと組み合わせて使用​​できます。両方を使用すると、明示的に宣言された列フィールドが最初にレンダリングされ、その後に自動生成された列フィールドが続きます。自動生成された列フィールドは、Columns コレクションに追加されません

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.columns.aspx

上記と、さまざまな種類のDataControlFieldslikeがあるという事実TemplateFieldBoundFieldまたは予測できないためにプロパティButtonFieldがない理由であると思います。IDそれらの一部は手動で (宣言的またはプログラム的に) 追加され、その他は自動的に追加され ( ButtonFieldsID は自動生成されます)、一部はColumnsコレクションに含まれますが、その他はそうではありません。

于 2012-06-07T21:22:09.867 に答える
0

ASP.NET グリッド ビュー 列には、コードでアクセスするための ID または一意の値がありません。

インデックスまたは名前で使用できます。

例えば:

インデックスの使用:

 if(Grid.Columns[0].Visible == true)  
    Grid.Columns[0].Visible = false;

 if(Grid.Columns[0].Visible == false)  
    Grid.Columns[0].Visible = true;

使用する名前:

 if(Grid.Columns["ColumnName"].Visible == true)  
    Grid.Columns["ColumnName"].Visible = false;

 if(Grid.Columns["ColumnName"].Visible == false)  
    Grid.Columns["ColumnName"].Visible = true;
于 2016-01-21T09:35:59.487 に答える