2012-05-07 8 views
0

私は GridViewのみを使用して、異なるLinq結果の結果を表示するプロジェクトに取り組んでいます。CodebehindのDataSourceとしてLinqToSqlを使用するデータキー

このGridViewのはあります

AutoGenerateColumns = true; 

我々はデータソースとして使用するLINQの結果があります。 この結果、DataKeysとして使用したい列があります。 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 

をしかし、我々はGridViewの上にそれらを表示したくありません。

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

+0

あなたが追加することができます "[0] .Visible = falseをgvReport.Columnsを。"特定の列を非表示にするか、「AutoGenerateColumns = false」を設定して手動でテーブルを定義することができます。 – Zachary

+0

AutoGenerateColumnsをtrueに設定する必要があります。これは、すべての結果を表示するグリッドビューが1つしかなく、各結果セットの列数が異なるためです。他の方法はありますか? – selo

答えて

1

AutoGenerateColumns = true;の場合は、DataKeysを使用して直接行う方法はありません。この方法で試すことができます。データソースをバインドする前に、DataKey列が常にコレクション内の同じ位置にあることを確認してください。 datakey "a"は列インデックス1で、データキー "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;     
      }    
     } 

私の頭の上から

<asp:GridView ID="gvReport" runat="server" onrowcreated="gvReport_RowCreated" AutoGenerateColumns="true"> 
0

いくつかのオプションのようにGridViewのは次のようになります。あなたはがしたいですか

  1. は使用しないでくださいAutoGenerateColumns、代わりに明示的にクレートの列表示する。

  2. 明示的にキー列を非表示:

    gvMyGrid.Columns["a"].Visible = false; 
    gvMyGrid.Columns["b"].Visible = false; 
    
関連する問題