我正在尝试使用数据库填充表格。我一直试图效仿无数的例子,但无济于事。我觉得我错过了一些基本的东西,因为这应该是这么难......谢谢。
<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();
}
答案 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”属性进行格式化。
希望这会有所帮助......