c# - 如何使用重复器以编程方式添加未知数量的列,其中某些列是在运行时在 SQL 字符串中声明的?

标签 c# asp.net repeater

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

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

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

我想要做的是将其绑定(bind)到 ASP.NET Repeater 并为上面的示例创建一个如下表:

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

我可以将数据绑定(bind)到中继器并使用 Eval,但这取决于固定数量的列和列名称。这可以通过编程方式完成吗?

最佳答案

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

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

asp.net site概述了 ASP.NET 中的数据绑定(bind)(使用 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();
        }
    }
}

关于c# - 如何使用重复器以编程方式添加未知数量的列,其中某些列是在运行时在 SQL 字符串中声明的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/922250/

相关文章:

c# - 获取所有列表成员 - MailChimp 3.0

C# 从文本文件中读取字符串

asp.net - 如何使用 javascript/ASP.NET/CSS 旋转和淡入淡出背景图像

asp.net - 如何通过将文件复制到其中来停止 IIS 网站

asp.net - 如何使用 asp.net 中继器呈现两列布局

asp.net - 为什么我的转发器控件在回发时为空?

asp.net - 在 Repeater FooterTemplate 中显示数据

c# - 为什么此输出在 C# 和 C++ 中不同?

c# - 如果检查两者都有值并且相等,则简化

javascript - 将图像动态插入 JavaScript 幻灯片 Asp.net C#