ASP.NET lisbox - 始终选择第一个项目

时间:2010-05-01 17:39:52

标签: asp.net listbox selecteditem

我有一个使用dictioanry填充的列表框。当我使用以下代码迭代所选项目时,它始终只显示所选的第一个项目 - 即使未选择第一个项目。

您是否遇到过这种情况?

你能帮忙吗?

当我使用字典进行绑定时会发生此问题。另一方面,通用列表工作正常。

 private void PopulateListBox2()
    {
        List<string> subjectList = new List<string>();
        subjectList.Add("Maths");
        subjectList.Add("Science");

        ListBox1.DataSource = subjectList;
        ListBox1.DataBind();
    }

如果值是唯一的,它甚至可以正常工作。但在我的场景中,值是相同的;只有关键变化。以下作品

 private void PopulateListBox5()
    {
        Dictionary<string, string> resultDictionary = new Dictionary<string, string>();

        resultDictionary.Add("Maths", "Lijo1");
        resultDictionary.Add("Science", "Lijo2");

        ListBox1.DataValueField = "Value";
        ListBox1.DataTextField = "Key";

        ListBox1.DataSource = resultDictionary;
        ListBox1.DataBind();
    }

^^^^^^^^^^^^^^^^^^^ 以下代码存在问题。

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            PopulateListBox1();
            ListBox1.SelectionMode = ListSelectionMode.Multiple;
        }
    }

    private void PopulateListBox1()
    {
        Dictionary<string, string> resultDictionary = new Dictionary<string, string>();

        resultDictionary.Add("Maths", "Lijo");
        resultDictionary.Add("Science", "Lijo");

        ListBox1.DataValueField = "Value";
        ListBox1.DataTextField = "Key";

        ListBox1.DataSource = resultDictionary;
        ListBox1.DataBind();
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        MakeList1Items();
    }

    private void MakeList1Items()
    {
        string test = null;

        foreach (ListItem item in ListBox1.Items)
        {
            if (item.Selected == true)
            {
                if(string.IsNullOrEmpty(test))
                {
                    test=item.Text;
                }
                else
                {
                    test = test +", " + item.Text;
                }

            }
        } 
        Response.Write(test);
    }

}

由于

Lijo

1 个答案:

答案 0 :(得分:0)

您对ListBox的DataValueFieldDataTextField采取了错误的方法。我不确定为什么,但它们必须是这样的:

ListBox1.DataValueField = "Key";
ListBox1.DataTextField = "Value";

所以,实际上,你最好不要使用Dictionary来进行这种绑定。也许试试List<KeyValuePair<string, string>>