0

データベースから10レコードをリストするリピーターコントロールがあります。私がやりたいのは、その10個のレコードを2つの列に分割することですが、その方法がわかりません。
問題は、<%#if(Container.ItemIndex == 0)%>を使用できないことです。
ItemDataBoundを使用してデータを操作しようとしましたが、生成されたデータをブラウザーに表示するためにリピーターを制御する方法がわかりません。

どんな助けやアイデアでもかまいません。
私が何を言おうとしているのか理解していただければ幸いです。
ありがとう。

4

2 に答える 2

1

あなたはjavascriptでこれを行うことができます。または、ラッパークラスを作成してジョブを実行することもできます。次に例を示します(JavaScript以外):

aspx:

<asp:Repeater runat="server" ID="myRepeater">
    <HeaderTemplate>
        <table>
            <tr>
                <th>Column 1</th>
                <th>Column 2</th>
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td>
                <%#Eval("FirstColumnData.DisplayString") %>
            </td>
            <td>
                <%#Eval("SecondColumnData.DisplayString") %>
            </td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

背後にあるコード:

// Say, this is your data item class

public class MyData
{
    public string Field1;
    public int Field2;


    public string DisplayString
    {
        get { return Field1 + " " + Field2; }
    }
}

// Wrap it

public class TwoColumnWrappedData
{
    public MyData FirstColumnData { get; set; }
    public MyData SecondColumnData { get; set; }
}

// Convert your datasource to wrapped datasource

private IEnumerable<TwoColumnWrappedData> GetWrappedData(IEnumerable<MyData> dataSource)
{
    TwoColumnWrappedData wrappedData = null;
    foreach (var myData in dataSource)
    {
        if (wrappedData == null)
        {
            wrappedData = new TwoColumnWrappedData();
            wrappedData.FirstColumnData = myData;
        }
        else
        {
            wrappedData.SecondColumnData = myData;
            yield return wrappedData;
            wrappedData = null;
        }
    }
}

// Now data bind like this

...

var dataSource = Enumerable.Range(1, 10).Select(i => new MyData { Field1 = "Item", Field2 = i }); // This is just an example; Populate it with actual data
myRepeater.DataSource = GetWrappedData(dataSource);
myRepeater.DataBind();

...
于 2013-02-10T05:49:59.093 に答える
0
<asp:Repeater runat="server">
    <ItemTemplate>
        <div class="<%# Container.ItemIndex % 2 == 0 ? "left" : "right"%>">
            <%# Eval("data") %>
        </div>
    </ItemTemplate>
</asp:Repeater>

出力します:

<div class="left">...</div><div class="right">...</div>
<div class="left">...</div><div class="right">...</div>
<div class="left">...</div>

今必要なのはCSSだけです(これは明らかに単純化された例です):

.left {float:left;width:50%;}
.right {float:right;width:50%;}
于 2013-02-10T11:40:57.367 に答える