Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每行中继器绑定5项_C#_Asp.net_Sql_Repeater - Fatal编程技术网

C# 每行中继器绑定5项

C# 每行中继器绑定5项,c#,asp.net,sql,repeater,C#,Asp.net,Sql,Repeater,我有一组来自数据库的项目。他们的人数可能会有所不同。我把它们绑在一个复读器里。下面的例子将解释我想要的: 我有11项来自数据库,我希望他们被分组在5项每行的条款 第一行:5项 第二排:5项 第三行:1项 目前,我只是将它们绑定到一个转发器中。我该怎么做呢?你可以试试下面,我错误地说是ListView,实际上我指的是DataList <asp:DataList ID="DataList1" runat="server" RepeatColumns="5" Rep

我有一组来自数据库的项目。他们的人数可能会有所不同。我把它们绑在一个复读器里。下面的例子将解释我想要的:
我有11项来自数据库,我希望他们被分组在5项每行的条款

  • 第一行:5项
  • 第二排:5项
  • 第三行:1项

目前,我只是将它们绑定到一个转发器中。我该怎么做呢?

你可以试试下面,我错误地说是ListView,实际上我指的是DataList

    <asp:DataList ID="DataList1" runat="server" RepeatColumns="5" 
        RepeatDirection="Horizontal" RepeatLayout="Flow">
        <ItemTemplate >
            <%--Your Item Data goes here--%>
        </ItemTemplate>            
    </asp:DataList>

如果可以使用ListView,则可以使用GroupItemCount。像这样的东西


您的物品在这里吗

如果你想继续使用中继器,我可以想出两种方法

首先,你可以坚持一个简单的项目列表,让中继器在每第五个项目后插入一个“新行”。您应该能够在
中使用类似

<% if ((Container.DataItemIndex % 5) == 4) { %>
    </div>
    <div>
<% } %>

老实说,这不是很好

或者,您可以使用的方法将项目批处理为5的
IEnumerable
s,然后使用两个嵌套的中继器渲染它们。设置外部中继器以将内部中继器包装在
标记中,并设置内部中继器的
数据源=''
。这将导致更清晰的标记。

是的。有可能:

<asp:Repeater ID="rptItems" runat="server">
           <ItemTemplate>
               <asp:Literal runat="server" Text='<%# Eval("Value") %>'></asp:Literal>
               <div style="clear: both" runat="server" Visible="<%# (Container.ItemIndex+1) % 5 == 0 %>"></div>
           </ItemTemplate>
       </asp:Repeater>

它为数字序列生成以下结果:

123445

678910

1112131415

16 17 18 19 20

您可以使用嵌套的数据控件(即
中继器
),也可以处理
OnItemDataBound
事件来绑定内部中继器

示例数据源组件:

public class Item
{
    public int ID { get; set; }
    public string Name { get; set; }

    public static List<List<Item>> getItems()
    {
        List<Item> list = new List<Item>()
        {
                new Item(){ ID=11, Name="A"},
                new Item(){ ID=12, Name="B"},
                new Item(){ ID=13, Name="C"},
                new Item(){ ID=14, Name="D"},
                new Item(){ ID=15, Name="E"},
        };

        /* Split the list as per specified size */

        int size = 2;
        var lists = Enumerable.Range(0, (list.Count + size - 1) / size)
                    .Select(index => list.GetRange(index * size,
                        Math.Min(size, list.Count - index * size)))
                    .ToList();

        return lists;
    }
}

//javascript函数
$(文档).ready(函数(){
$(“#ddlReport”).removeClass('required');
$('.sort')。单击(函数(){
$('#hdnColumnName').val($(this.text());
$('hdnColumnOrder').val($(this.attr('class'));
$(this.toggleClass(“desc asc”);
$(“#lnkSort”)。单击();
});
});
//绑定中继器
DataTable dt=objReport.GetCustomRecord();
fn=新列表();
对于(int i=0;i
为什么不使用定义列的列表视图?您希望如何对这些项进行分组?你的意思是通过一个特定的列来对他们进行分组吗?你想把它们连接起来吗?@Furqan你能提供一个example@MahmoudGamal我只想让他们5人一组出现。不要按任何类型对他们进行分组。所有答案都很有帮助。但是我接受了一个对我有用的+1。这是块的很好的替代方案。在reapter控件中,不能将容器与if语句一起使用
public class Item
{
    public int ID { get; set; }
    public string Name { get; set; }

    public static List<List<Item>> getItems()
    {
        List<Item> list = new List<Item>()
        {
                new Item(){ ID=11, Name="A"},
                new Item(){ ID=12, Name="B"},
                new Item(){ ID=13, Name="C"},
                new Item(){ ID=14, Name="D"},
                new Item(){ ID=15, Name="E"},
        };

        /* Split the list as per specified size */

        int size = 2;
        var lists = Enumerable.Range(0, (list.Count + size - 1) / size)
                    .Select(index => list.GetRange(index * size,
                        Math.Min(size, list.Count - index * size)))
                    .ToList();

        return lists;
    }
}
<asp:Repeater ID="outerRepeater"
            runat="server" onitemdatabound="outerRepeater_ItemDataBound"
            >
    <ItemTemplate>
    <p>
    Row
    </p>
    <asp:Repeater ID="innerRepeater"
                    runat="server">
        <ItemTemplate>
            <asp:Literal ID="literal1" runat="server" Text='<%# Eval("ID") %>' />
            <asp:Literal ID="literal2" runat="server" Text='<%# Eval("Name") %>' />
        </ItemTemplate>              
    </asp:Repeater>
    </ItemTemplate>              
</asp:Repeater>
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        outerRepeater.DataSource = Item.getItems();
        outerRepeater.DataBind();
    }
}
protected void outerRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Repeater repeater = e.Item.FindControl("innerRepeater") as Repeater;
    repeater.DataSource = Item.getItems()[e.Item.ItemIndex];
    repeater.DataBind();
}
 <asp:Repeater ID="Repeater1" runat="server"
  OnItemDataBound="Repeater1_databinding">

                <HeaderTemplate>
                    <table id="masterDataTable" class="reportTable list issues" width="100%">
                        <thead>
                            <tr>
                                <asp:Literal ID="literalHeader" runat="server"></asp:Literal>
                            </tr>
                        </thead>
                        <tbody>
                </HeaderTemplate>
                <ItemTemplate>
                    <tr>
                        <asp:Literal ID="literals" runat="server"></asp:Literal>
                    </tr>
                </ItemTemplate>
                <FooterTemplate>
                    </tbody> </table>
                </FooterTemplate>
            </asp:Repeater>
    <input id="hdnColumnName" runat="server" clientidmode="Static" type="hidden" />
    <input id="hdnColumnOrder" runat="server" clientidmode="Static" type="hidden" />


// javascript Function

 <script type="text/javascript">
    $(document).ready(function () {
        $('#ddlReport').removeClass('required');
        $('.sort').click(function () {
            $('#hdnColumnName').val($(this).text());
            $('#hdnColumnOrder').val($(this).attr('class'));
            $(this).toggleClass("desc asc");
            $("#lnkSort").click();
        });
    });
</script>

 // Bind repeater

       DataTable dt = objReport.GetCustomRecord();
        fn = new List<string>();
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            if (dt.Columns[i].ColumnName != "Maxcount" )
            {
                fn.Add(dt.Columns[i].ColumnName);
            }
        }

        Repeater1.DataSource = dt;
        Repeater1.DataBind();



protected void Repeater1_databinding(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Header)
    {
        if (e.Item.FindControl("literalHeader") != null)
        {
            StringBuilder sb = new StringBuilder();
            Literal li = e.Item.FindControl("literalHeader") as Literal;

            fieldName().ForEach(delegate(string fn)
            {
                if (hdnColumnName.Value != fn.ToString())
                {
                    sb.Append("<th width=\"10%\"> <a id=\"btnCustomerName\" class=\"sort desc\" onclick=\"btnSorts_onclick()\" style=\"cursor:pointer;text-decoration: none !important;\" >"
                        + fn.ToString() + "</a></th>");
                }
                else
                {
                    if (hdnColumnOrder.Value == "sort asc")
                        sb.Append("<th width=\"10%\"> <a id=\"btnCustomerName\" class=\"sort desc\"  onclick=\"btnSorts_onclick()\" style=\"cursor:pointer;text-decoration: none !important;\" >"
                       + fn.ToString() + "</a></th>");
                    else
                        sb.Append("<th width=\"10%\"> <a id=\"btnCustomerName\" class=\"sort asc\" onclick=\"btnSorts_onclick()\" style=\"cursor:pointer;text-decoration: none !important;\">"
                                                   + fn.ToString() + "</a></th>");
                }
            });
            li.Text = sb.ToString();

        }

    }
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        if (e.Item.FindControl("literals") != null)
        {
            DataRowView drv = (DataRowView)e.Item.DataItem;
            Literal li = e.Item.FindControl("literals") as Literal;
            StringBuilder sb = new StringBuilder();
            fieldName().ForEach(delegate(string fn)
            {
                sb.Append("<td>" + drv[fn.ToString()] + "</td>");
            });
            li.Text = sb.ToString();
        }
    }
}