从分隔数据库字符串字段中选择多选列表框中的项目

时间:2009-02-10 13:17:23

标签: c# asp.net database listbox multi-select

我正在尝试为数据库记录构建一个“编辑”页面,该页面可以编辑并保存回数据库。其中一个字段是多选列表框,需要在加载时突出显示硬编码列表中的相应列表项。

使用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>

谢谢大家。

5 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分: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;
    }
}

答案 2 :(得分: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的Selected值。

谢谢, Rathika Krishnavelu

答案 3 :(得分:0)

最简单的实施?

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

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

我不确定这是否有效。

答案 4 :(得分:0)

ListBox1.SelectionMode = ListSelectionMode.Multiple;
string[] pageRoles = myReader["UserProfile"].ToString().Split(',').ToArray();
pageRoles.ToList().ForEach(r => ListBox1.Items.FindByValue(r).Selected = true);