0

我有一个database table包含IDName
在 Default.aspx 中,我只显示NameDB 表中的单元格(列),这没什么大不了的。

但是 GridView 会生成一个这样的 html 表(当然我删除了 gridview 标题):
------------
| 姓名 1 |
------------
| 姓名 2 |
------------
| 姓名 3 |
------------

我的问题

我怎样才能让上面的 GridView:
1 - 传播名称1 row
2 - 并跳到一个new row every 2 records(每2个名字)?


我尝试过但失败了:

  • 我尝试使用中继器而不是 GridView 并且我写了 2 <td>,但不幸的是,正如您所看到的,虽然它会跳过每 2 个名称,但它会显示相同的名称(相同的记录)两次。
<asp:Repeater ID="repeater1" runat="server" DataSourceID="AccessDataSource1">
    <HeaderTemplate>
        <table>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td>
                <%# Eval("name")%>
            </td>
            <td>
                <%# Eval("name")%>
            </td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>
  • 我还尝试移动<tr></tr>HeaderTemplate 和 FooterTemplate,它现在确实在 1 行上显示它们,但不幸的是它不会每 2 个名称创建一个新行:
<asp:Repeater ID="repeater1" runat="server" DataSourceID="AccessDataSource1">
   <HeaderTemplate>
        <table>
          <tr>
    </HeaderTemplate>
    <ItemTemplate>
           <td><%# Eval("name")%></td>
    </ItemTemplate>
    <FooterTemplate>
          </tr>
        </table>
    </FooterTemplate>
</asp:Repeater>
4

3 回答 3

1

由于您只寻找 2,您可以使用交替项目模板。

      <AlternatingItemTemplate>
          <td>
            <%# Eval("name")%>
          </td>
        </tr>
      </AlternatingItemTemplate>

      <ItemTemplate>
        <tr>
          <td>
            <%# Eval("name")%>
          </td>
      </ItemTemplate>

您可能需要交换 <tr> 和 </tr> 标签

于 2013-03-05T13:58:10.847 回答
1

假设在将数据绑定到 GridView 之前,您的数据位于 DataTable 或 DataReader 中 - 您可以遍历数据源并构造一个包含 3 列的新 DataTable,该列将包含名称,然后将其绑定到网格。

3的伪示例:

DataTable dt = new DataTable();
dt.columns.add("name1");
dt.columns.add("name2");
dt.columns.add("name3");

int pointer = 1;
DataRow dr = null;

for(int i=0;i<sourceTable;i++)
{
    if( pointer==1 )
    {
        dr = dt.newRow();
        dr["name1"] = sourceTable.Rows[i]["Name"];
        dt.Rows.Add(dr);
        pointer++;
    }
    else if( pointer==2)
    {
        dr["name2"] = sourceTable.Rows[i]["Name"];
        pointer++;
    }
    else
    {
        dr["name3"] = sourceTable.Rows[i]["Name"];
        pointer=1;
    }
}
于 2013-03-05T15:08:02.807 回答
1

如果您对使用 a 死心塌地Repeater,请查看此 SO 问题的第一个答案:

如何在转发器中每行显示 x 个项目?

一个更简单的方法是使用DataList控件。它具有使用以下两个属性跨行拆分项目的内置功能:

DataList1.RepeatColumns = 2;
DataList1.RepeatDirection = RepeatDirection.Horizontal;
于 2013-03-05T15:22:19.650 回答