【问题标题】:Populate a table on an ASP.NET page在 ASP.NET 页上填充表
【发布时间】:2012-08-13 13:53:54
【问题描述】:

关于表(在这种情况下为单列)人口的简单问题。 尽管这似乎是一个简单的问题,但我从未参与过前端领域,所以就这样吧。

布局为 2 列 8 行。 类似的东西。

Name        A
LastName    B
Age         C
BirthDate   D
...

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

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

  1. 绘制一个 2Column - 8Row 表并将文本框放置在 A、B、C、D... 字段中。因此,稍后可以使用查询结果填充它们(此选项不是最“漂亮”的选项,因为 TextBox 改变了旨在使用 .CSS 文件被整个页面吸收的设计。

  2. 设置数据网格。我认为这里的问题是必须更改某些 A、B、C、D 字段以供以后查询使用。我不确定 Datagrids 是否适合。

我有解决这个问题的“好方法”吗? 提前致谢。

编辑。

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

【问题讨论】:

  • Visual Studio 是一种可与多种语言一起使用的 IDE——您说的是哪一种?什么表?你打算如何查询它?
  • @Oded 这是一个 C#/aspx 项目。数据库是 SQL。来自 SQL 的要放置在 A、B、C、D... 中的数据位于 DataSet 中。
  • aspx... WebForms 还是 MVC?

标签: c# visual-studio-2010 datagrid webforms


【解决方案1】:

对我来说,您描述数据的方式并不适合DataGrid。此控件最适合您计划以标准表格样式显示的数据,其中列名跨越顶部,然后在下方显示值的行。我也有点不清楚您是否打算将一个或多个 Object 实例(我现在将其称为 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 的单个实例绑定到您的 UI,一个简单的 HTML 表格应该可以正常工作。我使用TextBoxes 在此处显示值,但如果您不需要编辑它们,则只需使用Labels。

<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 的集合绑定到Repeater 上的DataSource 属性:

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 而不是表格来完成类似的布局,但是相同的原则适用于绑定单个对象和多个对象。只需将本示例中的表格布局替换为您最终定义的任何标记即可。

【讨论】:

  • 感谢迈克!它只是一个人,是的,它是你假设的一个对象。认为我可以将标签用于不会更改的单元格,并将 TextBoxes 用于用户在页面上工作时能够修改的单元格。
【解决方案2】:

WebForms 中有一个表格控件,您应该可以从 DataSet 中填充它,请参阅 MSDN 文档:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.table.aspx

【讨论】:

  • 您建议的链接上的第二个示例似乎是一种以编程方式填充数据的好方法。然后我应该能够读回用户更改的数据以供查询使用。感谢您的洞察力。
猜你喜欢
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多