2

我正在声明一个类似于以下内容的 SQL 字符串:

string SQL = "SELECT Column1, Column2, Column3, Date1, Date2 FROM Somewhere";

列数可能因情况而异,日期可以称为不同的名称,例如 StartDate、InterestDate 等。

我想做的是将它绑定到 ASP.NET 中继器并为上面的示例创建如下表:

<table>
  <tr>
    <th>Column1</th>
    <th>Column2</th>
    <th>Column3</th>
    <th>Date1</th>
    <th>Date2</th>
  </tr>
  <tr>
    Rows of values...
  </tr>
</table>

我可以将数据绑定到Repeater并使用Eval,但这取决于固定数量的列和列名。这可以以编程方式完成吗?

4

4 回答 4

3

如果您使用 GridView,您可以将 AutoGenerate columns 属性设置为 true(默认为 true),然后将 GridView 绑定到您的数据。

制作非常简单,您可能需要使用SQLDataSource控件。

asp.net 站点对asp.net中的数据绑定进行了概述(使用 ObjectDataSource,但概念完全相同)。本页还介绍了一些自定义 GridView 的方法。

更新:这是如何处理 rowdatabound 事件以格式化日期列的示例(根据其他答案的评论)。这可能会做得更好,但这应该让你开始。

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    DataRowView rowView = (DataRowView)e.Row.DataItem;

    for (int i = 0; i < rowView.Row.ItemArray.Length; i++)
    {
        DateTime? tmpDate = rowView[i] as DateTime?;

        if (tmpDate.HasValue)
        {
            if (tmpDate.Value.Second > 0)
                e.Row.Cells[i].Text = tmpDate.Value.ToShortTimeString();
            else
                e.Row.Cells[i].Text = tmpDate.Value.ToShortDateString();
        }
    }
}
于 2009-05-28T17:45:22.337 回答
1

这是一个在运行时动态创建转发器的示例的链接。唯一的要求是 ASP:Panel 在您的表单上以便注入它。

http://programming.top54u.com/post/ASP-Net-Repeater-dynamically-using-C-sharp-code.aspx

于 2009-05-28T17:53:41.027 回答
0

您可以使用根据数据源自动生成列GridView的a 。

于 2009-05-28T17:45:21.933 回答
0

如果您使用DataReader来检索数据,则可以使用它们的索引而不是它们的名称来访问列。即使它们的数量不是恒定的,您也应该能够遍历它们。

<% while(myRepeaterWithData.Read()) {
       for (int i = 0; i < myReaderWithData.FieldCount; i++) { %>
           The data on this row in column number <%= i%> is 
           <%= myRepeaterWithData[i] %>.
<%     }
    } %>
于 2009-05-28T17:48:02.473 回答