3

一般的な問題のようです。

GridViewの列を非表示にしようとしています。データを自動生成しているため、列を「visible=false」に設定するだけでは機能しないことを読みました。

現在、私のコードは次のようになっています。

 protected void Page_Load(object sender, EventArgs e)
    {
        bind();

        if (GridView1.Columns.Count > 0)
            GridView1.Columns[0].Visible = false;
        else
        {
            GridView1.HeaderRow.Cells[0].Visible = false;
            foreach (GridViewRow gvr in GridView1.Rows)
            {
                gvr.Cells[1].Visible = false;
            }
        }

    }

データを自動生成していると言ったように、「if」ステートメントはトリガーされません。上記のループを使用すると、列のヘッダーテキストを非表示にできますが、非表示のデータにアクセスできるように、列全体を非表示にします。

4

4 に答える 4

4

コントロールのライフ サイクルの後半 (Columns コレクションに値が入力されたとき) にこれを行うのはどうでしょうか。

protected void GridView1_PreRender(object sender, EventArgs e)
{
    if (GridView1.Columns.Count > 0)
        GridView1.Columns[0].Visible = false;
    else
    {
        GridView1.HeaderRow.Cells[0].Visible = false;
        foreach (GridViewRow gvr in GridView1.Rows)
        {
            gvr.Cells[1].Visible = false;
        }
    }
}

OnPreRender="GridView1_PreRender"注: GridView マークアップに追加する必要があります。

于 2013-03-04T20:15:00.767 に答える
1

GridView.DataKeyNamesおよびGridView.DataKeysプロパティを使用して ID を保存し、後で rowIndex を使用して取得しないのはなぜですか? これにより、列が自動生成されなくなります。

DataKeyNames

データキー

于 2013-03-04T20:22:40.703 に答える
0

ああ...問題は、列が事前定義されていないことです。

おそらく、Linq を使用して、表示するすべての列を選択できます。

gvTest.DataSource = (from d in dataSource
                     select new 
                     {
                         ColumnA = d.ColumnA...
                     }

または、JavaScript を使用して列を非表示にすることもできます。

于 2013-03-04T20:10:45.950 に答える
0

これは、自動生成列の制限です。列を事前に定義しないという利便性のために、列がどのように表示されるかについて多くの制御を放棄します。

今すぐ弾丸をかみ、列を定義します。必要なカスタマイズがこれだけである場合は問題ないかもしれませんが、90% 以上の場合、表示方法をカスタマイズするために列を定義することになります。

そうしないと、さまざまな状況 (データ ソース内の列の順序の変更など) で壊れやすいこれらの「微調整」がいくつか発生することになります。

于 2013-03-04T20:16:54.137 に答える