2012-08-13 63 views
5

有关表格(本例中为单列)的简单问题。 尽管它看起来像一个简单的问题,但我从未参与过前端领域,所以在这里。在ASP.NET页面上填充表格

布局是2列和8行。 有点像。

Name  A 
LastName B 
Age   C 
BirthDate D 
... 

第1列是稳定的,如果你愿意,“标题”不会​​改变。

A,B,C,D是查询数据库的结果。所以,我能想到的选项是:

  1. 绘制2Column - 在一个8Row表格和文本框的地方,B,C,d ...领域。所以稍后他们可以填充查询结果(这个选项不是最“美丽”的一个,因为TextBoxes改变了整个页面使用.CSS文件吸收的设计

  2. 设置一个数据网格在这里我想的问题是,一些A的,B,C,d字段将不得不改变供以后查询使用。而且我不知道,如果是的DataGrid包换了点。

有没有一种“好方法”可以解决这个问题? 在此先感谢。

编辑。

A,B,C,D数据保存在DataSet中。

+1

Visual Studio是一个与许多语言一起使用的IDE--您在谈论哪一个?一张桌子在什么?你打算如何查询它? – Oded 2012-08-13 13:55:30

+0

@Oded是一个C#/ aspx项目。 DB是SQL。来自SQL的数据将放置在A,B,C,D ...中的数据集中。 – 2012-08-13 13:58:14

+0

aspx ... WebForms或MVC? – Oded 2012-08-13 13:58:41

回答

7

对我来说,你所描述的数据并没有真正借给自己的方式太多了。一个DataGrid。此控件最适合您计划以标准表格样式显示的数据,其中列名在顶部显示,然后显示下面的值行。对于我来说,如果您打算将对象的一个​​或多个实例(我现在将其称为Person)绑定到UI,那么对我而言也有点不清楚。

让我们继续前进,并定义对象:

public class Person { 
    public String Name { get; set; } 
    public String LastName { get; set; } 
    public int Age { get; set; } 
    public DateTime BirthDate { get; set; } 
} 

Person单一实例绑定到你的用户界面,一个简单的HTML表格应该正常工作。我正在使用TextBoxes在此处显示值,但如果您不需要编辑它们,则只需使用Label即可。

<table> 
    <tr><td>Name:</td><td><asp:TextBox ID="txtName" runat="server" /></td></tr> 
    <tr><td>Last Name:</td><td><asp:TextBox ID="txtLastName" runat="server" /></td></tr> 
    <tr><td>Age:</td><td><asp:TextBox ID="txtAge" runat="server" /></td></tr> 
    <tr><td>Birthdate:</td><td><asp:TextBox ID="txtBirthDate" runat="server" /></td></tr>     
</table> 

这是在这一点上很琐碎从Person属性绑定到它们各自的对照使用代码隐藏在页面上。

如果您想要使用相同的布局在页面上显示Person的多个实例,请使用ASP.net Repeater。这样做的标记看起来更象:

<asp:Repeater ID="repPeople" runat="server"> 
    <ItemTemplate> 
     <table> 
      <tr><td>Name:</td><td><asp:TextBox ID="txtName" runat="server" Text='<%# Eval("Name") %>' /></td></tr> 
      <tr><td>Last Name:</td><td><asp:TextBox ID="txtLastName" runat="server" Text='<%# Eval("LastName") %>' /></td></tr> 
      <tr><td>Age:</td><td><asp:TextBox ID="txtAge" runat="server" Text='<%# Eval("Age") %>' /></td></tr> 
      <tr><td>Birthdate:</td><td><asp:TextBox ID="txtBirthDate" runat="server" Text='<%# String.Format("{0:d}", Eval("BirthDate")) %>' /></td></tr>     
     </table>     
    </ItemTemplate> 
</asp:Repeater> 

在代码隐藏,你刚才的Person集合绑定到DataSource财产上Repeater

protected void Page_Load(object sender, EventArgs e) { 

    // A simple example using Page_Load 
    List<Person> people = new List<Person>(); 
    for (int i = 0; i < 10; i++) { 
     people.Add(new Person() {Name = "Test", Age = 10, BirthDate=DateTime.Now, LastName = "Test"}); 
    } 

    if (!IsPostBack) { 
     repPeople.DataSource = people; 
     repPeople.DataBind(); 
    } 

} 

注:你可以使用CSS而不是表格来实现类似的布局,但是在绑定单个或多个对象之间应用相同的原则。只需将本例中的表格布局替换为最终定义的任何标记即可。

+0

谢谢迈克!它将只是一个人,是的,它是你所假设的一个对象。认为我可以使用不会更改的单元格的标签,以及用户可以在页面上工作时修改的单元格的TextBoxes。 – 2012-08-13 15:19:04