客户端:
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table id="Table_car">
<tr>
<th>Pos#</th>
<th>Model</th>
<th>Price</th>
<th>Image</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("Pos#") %></td>
<td><%# Eval("Model") %></td>
<td><%# Eval("Price") %></td>
<td><%# Eval("Image ") %></td>
</tr>
</ItemTemplate>
服务器:
protected void Page_Load(object sender,EventArgs e){ var table = new DataTable();
try { using (var conn = new SqlConnection(_connectionString)) { using (var cmd = new SqlCommand("spFilterByContinent", conn)) { using (var adapter = new SqlDataAdapter(cmd)) { cmd.CommandType = CommandType.StoredProcedure; adapter.Fill(table); } } } Repeater1.DataSource = table; Repeater1.DataBind(); } catch (Exception exception) { //TODO: write excepetion } } public void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Header) { string header1 = string.Empty; string header2 = string.Empty; string header3 = string.Empty; string header4 = string.Empty; // Retrieve headers from database and assign to variables SetHeaderValue(e.Item, "litHeader1", header1); SetHeaderValue(e.Item, "litHeader2", header2); SetHeaderValue(e.Item, "litHeader3", header3); SetHeaderValue(e.Item, "litHeader4", header4); } } private void SetHeaderValue(RepeaterItem item, string litId, string headerText) { var lit = item.FindControl(litId) as Literal; if (lit != null) lit.Text = headerText; } }
我正在使用转发器从db中检索数据,
我的问题是:如何从db中检索列标题,而不仅仅是数据本身? &lt; #Eval(&#34; COLUMN HEADER&#34;)%&gt; &LT; ---一样
答案 0 :(得分:1)
标题不是数据绑定作为转发器的项目(有关详细信息,请参阅此question及其答案)。但您可以在Repeater的 ItemCreated 事件中调整标题。首先,您需要在标题中放置一些文字控件并为ItemCreated事件添加处理程序:
<asp:Repeater ID="Repeater1" runat="server" OnItemCreated="Repeater1_ItemCreated">
<HeaderTemplate>
<table id="Table_car">
<tr>
<th><asp:Literal ID="litHeader1" runat="server" /></th>
<th><asp:Literal ID="litHeader2" runat="server" /></th>
<th><asp:Literal ID="litHeader3" runat="server" /></th>
<th><asp:Literal ID="litHeader4" runat="server" /></th>
</tr>
</HeaderTemplate>
</HeaderTemplate>
<!-- ... -->
</asp:Repeater>
然后,您需要在代码隐藏文件中实现事件处理程序。根据您的问题,此示例假定您要使用分配为Repeater的DataSource
的数据表的列名:
protected void Repeater1_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header)
{
var tbl = (DataTable)((Repeater)sender).DataSource;
SetHeaderValue(e.Item, "litHeader1", tbl, 0);
SetHeaderValue(e.Item, "litHeader2", tbl, 1);
SetHeaderValue(e.Item, "litHeader3", tbl, 2);
SetHeaderValue(e.Item, "litHeader4", tbl, 3);
}
}
private void SetHeaderValue(RepeaterItem item, string litId, DataTable tbl, int colIndex)
{
var lit = item.FindControl(litId) as Literal;
if (lit != null)
{
string headerText =
tbl.Columns.Count > colIndex ? tbl.Columns[colIndex].ColumnName : "Not set";
lit.Text = headerText;
}
}