如何将动态数据表绑定到数据列表
本文关键字:数据 列表 绑定 数据表 动态 | 更新日期: 2023-09-27 17:57:06
代码隐藏:
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Rego No", typeof(string)));
foreach (var item in list)
{
dt.Columns.Add(new DataColumn(string.Format("{0:dd/MM}",item),typeof(string)));
//enter code here
}
dlcalender.DataSource = dt;
dlcalender.DataBind();
.ASPX:
DataTable
列与日期一样是动态的。我正在绑定DataTable
但没有任何显示。
你能指导我如何在DataTable
中显示标题列表吗?
with linq。
dlcalender.DataSource = dt.select(p=>new{
c1=p.columns[0],
c2=p.columns[1],
......
});
和使用
<%# Eval("c1") %>
<%# Eval("c2") %>
......
问题是您已经创建了列,但尚未在DataTable中插入任何行,因此这就是为什么在浏览器中运行站点时看不到任何结果的原因
我认为您还应该了解 DataList 控件在 ASP.NET 中的工作原理。
您需要为只会出现一次的信息创建一个标题模板,并为将要重复的项目创建一个项目模板。
您无法将数据表绑定到 HeaderTemplate,因为它不知道将哪一行用于标题;
在下面的示例中,我对标题使用了字符串属性,对重复项使用了 DataTable:
.ASPX:
<asp:DataList ID="dlcalender" runat="server">
<FooterTemplate>
</FooterTemplate>
<HeaderTemplate>
<asp:Label ID="head1" runat="server" Text='<%# Heading1 %>' />
<asp:Label ID="head2" runat="server" Text='<%# Heading2 %>' />
<asp:Label ID="head3" runat="server" Text='<%# Heading3 %>' />
<asp:Label ID="head4" runat="server" Text='<%# Heading4 %>' />
</HeaderTemplate>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"Rego No")%>
<%# DataBinder.Eval(Container.DataItem,"Column1") %>
<%# DataBinder.Eval(Container.DataItem,"Column2")%>
<%# DataBinder.Eval(Container.DataItem,"Column3")%>
</ItemTemplate>
</asp:DataList>
代码隐藏:
public string Heading1 { get; set; }
public string Heading2 { get; set; }
public string Heading3 { get; set; }
public string Heading4 { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
Heading1 = "Heading 1";
Heading2 = "Heading 2";
Heading3 = "Heading 3";
Heading4 = "Heading 4";
var list = new List<string> { "Column1", "Column2", "Column3" };
var table = new DataTable();
table.Columns.Add(new DataColumn("Rego No", typeof(string)));
foreach (var item in list)
table.Columns.Add(item, typeof(string));
//Now add some rows(which will be repeated in the ItemTemplate)
table.Rows.Add("0", "Row 0", "Row 0", "Row 0");
table.Rows.Add("1", "Row 1", "Row 1", "Row 1");
table.Rows.Add("2", "Row 2", "Row 2", "Row 2");
dlcalender.DataSource = table;
dlcalender.DataBind();
}
另外,为什么不只使用网格视图?它更适合显示表格数据,我相信这就是你所拥有的
由于您在运行时动态创建了数据列,因此还必须在运行时将它们添加到网格视图中,例如:
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Rego No", typeof(string)));
foreach (var item in list)
{
dt.Columns.Add(new DataColumn(string.Format("{0:dd/MM}",item),typeof(string)));
//enter code here
dlcalender.Columns.Add(string.Format("{0:dd/MM}",item), string.Format("{0:dd/MM}",item));
}
dlcalender.DataSource = dt;
dlcalender.DataBind();
在上面的代码中,我在将列添加到数据表的同时将列添加到数据列表中。
如果您不想添加所有内容,可以过滤它们。