1

私は2つのStringCollectionsを持っています:

StringCollection ParameterIDs
StringCollection ParameterValues

これらの両方のStringCollectionをDataSourceとしてマップできますか?次のようになります。

repeater.DataSource = ParameterIDs (as row1) + ParameterValues (as row2);
repeater.DataBind();

次のようなリピーターで使用します。

                <asp:Repeater ID="repeatParameters" runat="server">
                    <HeaderTemplate>
                        <table>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <tr>
                            <td class="formLabel">
                                <asp:Label ID="lblParameterID" Text="<% #DataBinder.Eval(Container.DataItem,"ParameterIDs") %>" runat="server" MaxLength="50"></asp:Label><br />
                            </td>
                            <td class="formInputText">
                                <asp:Label ID="lblParameterValue" Text="<%#DataBinder.Eval(Container.DataItem,"ParameterValues") %>" runat="server" MaxLength="50"></asp:Label><br />
                            </td>
                        </tr>
                        <tr>
                    </ItemTemplate>
                    <FooterTemplate>
                        </table>
                    </FooterTemplate>
                </asp:Repeater>
4

5 に答える 5

5

最初に考えたのは、それらをディクショナリ
でマッシュアップし、それをデータソースとして使用することです。

再考:必要な値 でDataSet
を 作成します。

3 番目の考え: KeyValuePair
を使用します。

ご覧のように、これを行うにはさまざまな方法がありますが、それらすべてに共通の要素が
あります。対応する値を格納およびマップする単一のオブジェクトを作成します。

于 2009-06-30T16:17:38.110 に答える
2

いいえ、DataSource には ICollection インターフェイスを持つオブジェクトが必要なためです。

他の人が言ったように、辞書などを作成できます。

List<KeyValuePair<string,string>>

パラメータ id はキーで、パラメータ値は KeyValuePair の値です。

于 2009-06-30T16:20:05.880 に答える
1

.NET 3.5を使用している場合、これはまさにあなたが望むことを行います:

 StringCollection parameterIds = new StringCollection();
 StringCollection parameterValues = new StringCollection();
 parameterIds.Add("someID");
 parameterValues.Add("someValue");

 var dataSource = parameterIds.Cast<string>()
     .SelectMany(itemOne => parameterValues
     .Cast<string>(), (itemOne, item2) => new { Row1 = itemOne, Row2 = item2 });

 repeater.DataSource = dataSource;
 repeater.DataBind();

Bogdan_Ch が言ったように、 .NET 2.0 以降を使用している場合は、StringCollectionから離れることをお勧めします。これには、拡張メソッドList<string>を使用する必要がないという追加の利点があります。Cast

于 2009-07-01T07:32:32.530 に答える
1

2 つのオプションをお勧めします。

        StringCollection joined = new StringCollection();

        foreach(string s in stringCollection1)
            joined.Add(s);
        foreach (string s in stringCollection2)
        {
            if (!joined.Contains(s))
                joined.Add(s);
        }
  1. .NET 2.0 以降では、StringCollection の代わりに List を使用することをお勧めします AddRange() を使用すると、既存のリストに別のリストを追加できます。

  2. .NET 3.5 では、Linq を使用して 2 つのリストを交差させることができます

    public static IEnumerable<TSource> Intersect<TSource>(
    this IEnumerable<TSource> first,
    IEnumerable<TSource> second
    

    )

于 2009-06-30T16:34:53.717 に答える
1

Dictionary に文字列コレクションを設定し、Dictionary にバインドします。

于 2009-06-30T16:19:49.923 に答える