簡體   English   中英

中繼器:從數據庫中檢索列標題

[英]repeater: retrieve columns headers from database

客戶:

<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>

服務器:

受保護的無效Page_Load(對象發送者,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中檢索列標題,而不僅僅是數據本身? <#Eval(“列標題”)%> <-

頭不作為轉發器的項進行數據綁定(有關詳細信息,請參閱此問題及其答案)。 但是您可以在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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM