2012-01-06 11 views
1

いくつかのカラムと設定を共有するGridViewとDataSourceがありますので、DataControlFieldCollectionを与えて、aspxファイルにカラムを追加できるようにしました。このように、私はこれを行うことができます:実行時にGridViewにTemplateFieldを追加する

<mine:PreGeneratedGridView runat="server"> 
    <Columns> 
     <asp:BoundField DataField="mycolumn" 
      HeaderText="My Header" SortExpression="mycolumn" /> 
    </Columns> 
</mine:PreGeneratedGridView> 

を私は私のPreGeneratedGridViewUserControlに含まれているGridViewに追加の列を移動するには、このコードを使用しています:

protected void Page_Load(object sender, EventArgs e) 
    { 
     for (int i = 0; i < Columns.Count; ++i) 
     { 
      if (IsPostBack) myGridView.Columns.RemoveAt(i); 
      myGridView.Columns.Insert(i, Columns[i]); 
     } 
    } 

それは醜いビットとして私を打つ(とおそらくフラットアウト間違って、それは動作しているようだが)、すべてのページの負荷でGridViewに列を追加するが、Page_Initにこの列読み込みコードを入れようとしたときに、TemplateFieldの列が実行されないように空白ですが、ヘッダはありませんでした) PostBack

このようにPage_Load/IsPostBackを使用せずにカラムをロードする方法はありますか?

+0

を私は理解していません。ポストバックで、単にテーブルの列で何もしないとどうなりますか? –

+0

@Andrew: 'TemplateField'列はヘッダーを除いて空白になります。 – Brian

答えて

0

次の例が役立ちます。これは、ITemplateを実装するクラスを使用し、EditItemTemplatesを使用して動的に作成されたTemplateFieldにコントロールを追加できるようにします。

How to add a ComboBox to an asp.net unbound GridView

+0

それは本当に私を助けません。私の問題は 'TemplateField'自体での作業ではありません。むしろ、私は既に動作し、自己完結型の 'TemplateField'を持っており、' TemplateField'全体を 'GridView'にコピーしたいと思います。 – Brian

0

私はあなたが求めているものを完全に一定ではないんだけど、あなたの目標は、GridViewのは、匿名型にバインドされたGridViewにTemplateFieldでフィールドを表示する場合、あなたのような何かを書くことができますこれは、Eval方法使用して:あなたはそれらを削除し、ポストバックでそれらを再挿入する必要があり、なぜ

// Code to bind GridView 
gv.DataSource = foo.Select(x => new { 
    field1 = x.boomboom(), 
    field2 = x.scramble() }; 
gv.DataBind; 

<%-- code in your ASP.net codebehind --%> 
    <asp:TemplateField> 
     <ItemTemplate> 
      <%# Eval("field1").ToString() %> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
     <ItemTemplate> 
      <%# Eval("field12).ToString() %> 
     </ItemTemplate> 
    </asp:TemplateField> 
関連する問題