0

私は、1 つのGridView のみを使用してさまざまな Linq 結果の結果を表示するプロジェクトに取り組んできました。

このグリッドビューには次のものがあります。

AutoGenerateColumns = true;

データソースとして使用したい Linq の結果があります。この結果には、DataKey として使用したい列があります。結果を GridView にバインドするとき、これらの列をユーザーに表示したくありません。

次に例を示します。

gvMyGrid.DataSource = from finalRows in summaryReport
                      select new
                      {
                          finalRows.a,
                          finalRows.b,
                          finalRows.c,
                          finalRows.d,
                          finalRows.e
                      };

gvMyGrid.DataKeyNames = new string[] { "a", "b" };
gvMyGrid.DataBind();

したがって、このバインドが完了した後も、「a」と「b」が列として表示されます。呼び出すときに「a」と「b」を使用できます。

gvReport.Datakeys

しかし、グリッドビューでそれらを見たくありません。

私の質問は、これらの列を非表示にしながらデータキーとして使用するにはどうすればよいでしょうか? ありがとうございました。

4

2 に答える 2

1

DataKeys if を使用してこれを行う直接的な方法はないと思いますAutoGenerateColumns = true;。この方法で試すことができます。データソースをバインドする前に、DataKey 列が常にコレクション内の同じ位置にあることを確認してください。datakey "a" が列インデックス 1 であり、datakey "b" が列インデックス 2 であるとします。したがって、コレクションが 10 列または 20 列を返す場合でも、"a" と "b" はインデックス 1 と 2 にある必要があります。これにより、列が非表示になります。

        protected void gvReport_RowCreated(object sender, GridViewRowEventArgs e)
        {
            for (int i = 0; i < e.Row.Cells.Count; i++)
            {
                e.Row.Cells[1].Visible = false; 
                e.Row.Cells[2].Visible = false;                
            }            
        }

GridView は次のようになります

<asp:GridView ID="gvReport" runat="server" onrowcreated="gvReport_RowCreated" AutoGenerateColumns="true">
于 2012-05-07T23:08:22.563 に答える