2

編集してデータベースに保存できるデータベース レコードの「編集」ページを作成しようとしています。フィールドの 1 つは複数選択リストボックスで、ロード時にハードコードされたリスト内の適切なリスト項目を強調表示する必要があります。

C# を使用して、データベース フィールドからのカンマ区切りの文字列に基づいて、適切な項目を選択して、複数選択リスト ボックスを作成するにはどうすればよいですか? ループを含むいくつかのソリューションを調査しましたが、限られた C# スキルセットではそれらを機能させることができませんでした。

行き詰まる前に、これが私が今持っているすべてです。文字列内の複数の値を考慮していないことがわかります。値が一致するかどうかを確認できる「含む」のような関数はありますか? ここでは、(おそらく基本的な) C# ロジックとコーディングがまだいくつか欠けています。

int i;
for (i = 0; i <= CATEGORYListBox.Items.Count - 1; i++)
{
    if (reader["CATEGORY"].ToString() == CATEGORYListBox.Items(i).Value)
    {
        CATEGORYListBox.Items(i).Selected = True;                   
    }
}

...

<asp:ListBox ID="CATEGORYListBox" runat="server">
    <asp:ListItem Value="Circulation">Circulation</asp:ListItem>
    <asp:ListItem Value="Interactive Media">Interactive Media</asp:ListItem>
    <asp:ListItem Value="Classified">Classified</asp:ListItem>
    <asp:ListItem Value="Publishing">Publishing</asp:ListItem>
    <asp:ListItem Value="Editorial">Editorial</asp:ListItem>
    <asp:ListItem Value="Retail">Retail</asp:ListItem>
 </asp:ListBox>

みんな、ありがとう。

4

5 に答える 5

5

これらの線に沿って何かを提案します。ネストされたループを実行するよりも読みやすいようです。

    List<string> categories = new List<string>(reader["CATEGORY"].ToString().Split(','));
    foreach (ListItem item in CATEGORYListBox.Items)
    {
        if (categories.Contains(item.Value))
            item.Selected = true;
    }
于 2009-02-10T15:04:41.647 に答える
2

これはブルートフォースで醜いですが、機能するはずです。上記のコードは、VBとC#のハイブリッドのようなもののようです。以下のコードはC#のみです。また、コードビハインドでADO.Netを実行しないことを検討してください。

for (int i = 0; i < CATEGORYListBox.Items.Count; i++)
{
    foreach (string category in reader["CATEGORY"].ToString().Split(','))
    {
        if (category != CATEGORYListBox.Items[i].Value) continue;
        CATEGORYListBox.Items[i].Selected = true;
        break;
    }
}
于 2009-02-10T13:31:21.683 に答える
0

最も簡単な実装は?

string sequenceFromDBorPostBack= "1,3,4,6,48";

foreach (ListItem item in lstLocations.Items)
{
     item.Selected = sequenceFromDBorPostBack.Split(',').Contains(item.Value);
}

これがパフォーマンスに効果的かどうかはわかりません..

于 2010-09-22T10:43:01.883 に答える
0

問題の別の解決策は次のとおりです。

    string[] arrSplitItems;
    arrSplitItems = TestsOrdrd.Split(',');
    if (arrSplitItems.Length > 0)
    {
        for (int iCount = 0; iCount < arrSplitItems.Length; iCount++)
        {
            lstTestcode.Items.FindByValue(arrSplitItems[iCount].ToString()).Selected = true;
        }
    }

TestsOrdrd には、Listbox の選択された値が含まれています。

ありがとう、ラティカ・クリシュナヴェル

于 2009-10-06T05:36:17.607 に答える
0
ListBox1.SelectionMode = ListSelectionMode.Multiple;
string[] pageRoles = myReader["UserProfile"].ToString().Split(',').ToArray();
pageRoles.ToList().ForEach(r => ListBox1.Items.FindByValue(r).Selected = true);
于 2013-06-12T23:23:08.173 に答える