2017-03-14 32 views
0

返されるデータテーブルに従ってGridViewとその列を動的に作成したいとします。だから、私は、ViewDataを介してaspxファイルにdatatableを返し、GridViewテンプレートを作成するdatatableの列を繰り返します。次に、aspxでC#を使用して、DataViewをGridViewにバインドします。しかし、私がaspxファイルでGridViewを取得しようとすると、エラーメッセージ "名前XXXは現在のコンテキストに存在しません"が表示されます。私がしたいことを達成するための他の方法?ASP.Net MVC - 動的にGridViewを作成し、それをaspxファイルにバインドする

コントローラ

public ActionResult gridViewPage() { 
    DataTable dt = runSqlQueryToReturnADataTable(); 
    ViewData["DT"] = dt; 
    ViewData["DisplayMode"] = "Grid"; 
    return View(); 
} 

ASPXファイル

<% if ("Grid".Equals(ViewData["DisplayMode"])) { %> 
    <asp:GridView ID="gridViewForQuery" runat="server"> 
     <Columns> 
      <% foreach (System.Data.DataColum col in (ViewData["DT"] as System.Data.DataTable).Columns) %> 
        <asp:BoundField DataField="<%: col.ColumnName %>"/> 
     </Columns> 
    </asp:GridView> 

    <% gridViewForQuery.DataSource = (ViewData["DT"] as System.Data.DataTable); gridViewForQuery.DataBind(); %> 
<% } %> 
+0

GridViewのAutoGeneratedColumn = Trueを直接設定して、Databaseが持つ列を自動的に作成することができます。 –

答えて

0

あなたがどんな状態に依存して、グリッドを定義する場合、あなたは分離コードからアクセスすることはできません。

以下は、私のソースコードです。

これにグリッドビューの定義を変更します。

<% if ("Grid".Equals(ViewData["DisplayMode"])) { 
    gridViewForQuery.DataSource = (ViewData["DT"] as System.Data.DataTable); gridViewForQuery.DataBind(); 
}%> 
<asp:GridView ShowHeaderWhenEmpty="false" AutoGenerateColumns="true" ID="gridViewForQuery" runat="server"> 

</asp:GridView> 
+0

お返事ありがとうございます。あなたのソリューションは問題を解決します!しかし、別の問題が生じます。エラーメッセージ "Control 'gridViewForQuery'タイプの 'GridView'はフォームタグ内にrunat = serverで配置する必要があります。"データソースとバインドデータをコードの背後にのみ割り当てることができますか?他の解決策?ありがとうございました! –

+0

私はポストを更新しました。 runat = "server"エラーを確認してください。 http://stackoverflow.com/a/21554229/4172872 – levent

関連する問題