4

私は通常Repeater、asp.netページでテーブルを生成するために処理しますが、テーブルで動的列を処理する必要があるため、Webコントロールを使用してこの問題を解決する一般的なアプローチがあるかどうか疑問に思います。

私は使用GridViewしたことがないので、これが動的列を持つテーブルをレンダリングするのに適しているかどうかわかりませんか?より適切なアプローチを教えていただけますか?を使用してこれを達成する方法はありRepeaterますか?

4

3 に答える 3

1

AutoGenerateColumnsを true に設定するGridViewこともできます。列を検査して追加しますDataSource

<asp:sqldatasource id="CustomersSource"
  selectcommand="SELECT CustomerID, CompanyName, FirstName, LastName FROM SalesLT.Customer"
  connectionstring="<%$ ConnectionStrings:AWLTConnectionString %>" 
  runat="server"/>

<asp:gridview id="CustomersGridView" 
  datasourceid="CustomersSource" 
  autogeneratecolumns="True"
  emptydatatext="No data available." 
  allowpaging="True" 
  runat="server" DataKeyNames="CustomerID">
</asp:gridview>
于 2012-09-04T08:56:44.283 に答える
0

その状況にどのように対処したいかを知ることは非常に重要です。

状況 1: 既存のテーブルがあり、時々列を追加する場合 (これはあまり実用的ではありません)、すぐに GridView に移動し、AutoGenerateColumns バインド プロパティを true に設定できます。

状況 2

テーブルを処理する独自の HTmlHelper クラスを作成できます。これについては、次の投稿にアクセスできます。

オブジェクトのリストから MVC HtmlHelper テーブルを作成する方法

MVC を使用している場合。

于 2012-09-04T09:05:32.323 に答える
0

使用する必要がある場合は、これを行うための簡単なハックを次に示しますRepeater

.aspx で:

    <asp:Repeater ID='rptr' runat='server'>
        <ヘッダー テンプレート>
            <テーブル>
                <スレッド>
                  <tr>
                    <番目>
                        常に表示されるヘッダー列
                    </th>
                    <th id='thHidable' runat='server' class='hideable'>
                        非表示可能なヘッダー列
                    </th>
                  </tr>
                </スレッド>
                <本体>
        </HeaderTemplate>
        <アイテムテンプレート>
            <tr>
                <td>
                    繰り返される列
                </td>
                <td id='tdHideable' runat='server' class='hideable'>
                    非表示可能な繰り返し列
                </td>
            </tr>
        </ItemTemplate>
        <フッターテンプレート>
            </tbody></table>
        </FooterTemplate>
    </asp:リピーター>

コードビハインド (C# が使用されていると仮定):

    protected override void Page_Init()
    {
        this.rptr.ItemDataBound += new RepeaterItemEventHandler(rptr_ItemDataBound);
    }
    void rptr_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        RepeaterItem item = (RepeaterItem)e.Item;
        if (item.ItemType == ListItemType.Header)
        {
            HtmlTableCell thHidable = (HtmlTableCell)item.FindControl("thHidable");
            if (hideCondition)
            {
                // thHidable.Visible = false; // do not render, not usable by client script (use this approach to prevent data from being sent to client)
                thHidable.Style["display"] = "none"; // rendered hidden, can be dynamically shown/hidden by client script
            }
        }
        else if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
        {
            HtmlTableCell tdHideable = (HtmlTableCell)item.FindControl("tdHideable");
            if (hideCondition)
            {
                // tdHideable.Visible = false; // do not render, not usable by client script (use this approach to prevent data from being sent to client)
                tdHideable.Style["display"] = "none"; // rendered hidden, can be dynamically shown/hidden by client script
            }
        }
    }

(省略可能)クライアント側で列を動的に表示する場合 (レンダリングされたと仮定)、jQuery を使用して (簡潔にするため):

$(".hideable").show();

于 2012-11-30T20:45:51.473 に答える