尝试使用中继器填​​充表

时间:2012-03-30 16:41:27

标签: c# asp.net

我正在尝试使用数据库填充表格。我一直试图效仿无数的例子,但无济于事。我觉得我错过了一些基本的东西,因为这应该是这么难......谢谢。

    <table>
        <asp:Repeater ID="rpt" runat="server">
            <HeaderTemplate>
                <tr>
                    <th></th>
                </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                        <asp:Label ID="data" runat="server" Text='<%= string.Format("{0}", My_Variable) %>' />
                    </td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
    </table>

C#

   protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["_connectionString"].ConnectionString);
        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Customer", Conn);
        DataTable table = new DataTable();
        adapter.Fill(table);
        rpt.DataSource = table;
        rpt.DataBind();
    }

    private void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        //if (e.Item.ItemType == 
        Label l = (Label)e.Item.FindControl("data");
        l.Text = e.Item.DataItem.ToString();
    }

3 个答案:

答案 0 :(得分:4)

对于大多数简单变量,您不应该需要rpt_ItemDataBound。在.aspx文件中,请尝试使用Eval()函数:

<ItemTemplate>
    <tr>
        <td>
            <asp:Label ID="data" runat="server" Text='<%#Eval("MyColumnName") %>' />
        </td>
    </tr>
</ItemTemplate>

Eval()仅适用于模板化数据绑定控件的上下文。它会获取您指定的数据源,查找转发器当前呈现的项目,并允许您访问该项目的成员属性。

当您需要渲染不在数据源中的额外内容时,您只需要使用ItemDataBound事件,但需要代码逻辑来确定如何呈现。

答案 1 :(得分:2)

看起来你大部分都在那里。 e.Item.DataItem是一个DataRow(因为你绑定了一个DataTable,它只是一堆DataRow。你需要将它转换为DataRow,以便你可以从中获取东西。接下来,你想要进入一些专栏,即

l.Text =((DataRow)e.Item.DataItem)["someColumn"];

另一种选择是在标记中完成整个操作,如果您只是从dataTable中获取值并将其放在标签的文本中,这将是最简单的,但您可能需要使用数据绑定事件,如果它更难。

<asp:Label ID="data" runat="server" Text='<%#Eval("MyColumnName")' />

答案 2 :(得分:1)

你也可以使用一个简单的BoundField,如下所示......而不是Label ...(除非你因任何特殊原因需要标签)......

  <asp:BoundField HeaderText="Your Column Name" 
            DataField="YourDataTableColumnName"/>

您还可以使用BoundField的“DataFormatString”属性进行格式化。

希望这会有所帮助......