私は通常Repeater、asp.netページでテーブルを生成するために処理しますが、テーブルで動的列を処理する必要があるため、Webコントロールを使用してこの問題を解決する一般的なアプローチがあるかどうか疑問に思います。
私は使用GridViewしたことがないので、これが動的列を持つテーブルをレンダリングするのに適しているかどうかわかりませんか?より適切なアプローチを教えていただけますか?を使用してこれを達成する方法はありRepeaterますか?
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>
その状況にどのように対処したいかを知ることは非常に重要です。
状況 1: 既存のテーブルがあり、時々列を追加する場合 (これはあまり実用的ではありません)、すぐに GridView に移動し、AutoGenerateColumns バインド プロパティを true に設定できます。
状況 2
テーブルを処理する独自の HTmlHelper クラスを作成できます。これについては、次の投稿にアクセスできます。
オブジェクトのリストから MVC HtmlHelper テーブルを作成する方法
MVC を使用している場合。
使用する必要がある場合は、これを行うための簡単なハックを次に示します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();