在ASPX页面的代码隐藏中,我得到的关于员工的一些细节(从外部数据源读取)。最后我想以下面的方式展示。下面的显示可能显示不正确,但是是一个带有标题/列方法的简化表。
___________________________________________________________________________________
| DEPT | HR | |__________________________________________________________________________________|
| Employee Image | Emp Name | Hire Date |
|____________________________________|_____________________________________________|
| Steve.gif | Steve Jobs | 22/05/1979 |
|____________________________________|_____________________________________________|
| Mark.gif | Mark Miller | 22/05/1949 |
|____________________________________|_____________________________________________|
| DEPT | Operations | |__________________________________________________________________________________|
| Employee Image | Emp Name | Hire Date |
|____________________________________|_____________________________________________|
数据从各种数据源收集,最终在代码隐藏中可用。我想以上述方式展示。
最好的方法是什么?我想创建一个htmldivcontrol并添加所有这些值。最后,我将div标签绑定到页面。
目前我正在尝试采用方法,但想知道是否有更好的方法。
请分享您的观点和示例。 _
答案 0 :(得分:6)
我认为最好的方法是使用这样的中继器:
<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_RowDataBound">
<ItemTemplate>
<table runat="server" style="color: White; background-color: #3A4F63;" visible="false"
id="headerTable">
<tr>
<td colspan="3" align="center">
<asp:Label ID="headerTitle" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td style="width: 200px; background-color: #3A4F63; color: White;">
Image
</td>
<td style="width: 200px;">
Name
</td>
<td style="width: 200px;">
Hire Date
</td>
</tr>
</table>
<!-- These are the actual data items -->
<!-- Bind to your specific properties i.e. Employees. -->
<table>
<tr>
<td style="width: 200px;">
<asp:Image ID="img" runat="server" ImageUrl='<%#Eval("ImageUrl") %>'></asp:Image>
</td>
<td style="width: 200px;">
<asp:Label ID="lblName" runat="server" Text='<%#Eval("Name") %>'></asp:Label>
</td>
<td style="width: 200px;">
<asp:Label ID="lblHireDate" runat="server" Text='<%#Eval("HireDate") %>'></asp:Label>
</td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
然后在您的代码背后,例如:
private string currentDepartment =string.Empty;
protected void rpt_RowDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
//Binding to Employee object.
if (currentDepartment!= (e.Item.DataItem as Employee).Department) {
currentDepartment = (e.Item.DataItem as Employee).Department;
e.Item.FindControl("headerTable").Visible = true;
(e.Item.FindControl("headerTitle") as Label).Text = (e.Item.DataItem as Employee).Department;
}
else {
e.Item.FindControl("headerTable").Visible = false;
}
}
}
您需要将网格绑定到List<Employee>
,其中Employee
的定义如下:
public class Employee
{
public string Department {get;set;}
public string ImageUrl {get;set;}
public DateTime HireDate {get;set;}
public string Name {get;set;}
}
但他们必须先被部门命令才能被绑定。
填充转发器的示例代码
private void bindGridView()
{
List<Employee> emps = new List<Employee>();
for (int i = 0; i < 5; i++)
{
Employee e = new Employee();
if (i % 2 == 0)
{
e.Department = "Human resources";
e.HireDate = DateTime.Now.AddDays(-i);
e.ImageUrl = @"http://www.freedigitalphotos.net/images/gal_images/av-_146.jpg";
}
else
{
e.Department = "Information Technology";
e.HireDate=DateTime.Now.AddMonths(-i);
e.ImageUrl = "http://www.freedigitalphotos.net/images/gal_images/av-_314.jpg";
}
e.Name = "Employee " + i;
emps.Add(e);
}
rpt.DataSource = emps.OrderBy(x=>x.Department);
rpt.DataBind();
}
<强>可生产强>
答案 1 :(得分:1)
GridView可能是最好的
答案 2 :(得分:0)
你想动态地做这个表吗?你将来会很难编辑它。为什么不在你的标记(.aspx)中制作一个普通的HtmlTable,放一些标签和图像,然后在代码隐藏中填充它?有什么特别原因吗?
答案 3 :(得分:0)
你有几个选择。
一种方法是将所有不同的数据合并到您动态创建并绑定到数据源的单个数据表中。
另一种方法是简单地按照你的建议做,然后用相关信息发出div。
第三种是在aspx文件中定义表并使用asp:label控件。在您的代码后面填充各种数据源的标签控件。
考虑到这些选项,我可能会选择第三种选择。最简单的方法是在需要时重新配置/更改显示。