ASP.NET lisbox - выбранный первый элемент, всегда - PullRequest
1 голос
/ 01 мая 2010

У меня есть список, который заполняется с помощью 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 голосов
/ 01 мая 2010

У вас DataValueField и DataTextField в ListBox неправильно. Я не уверен почему , но они должны быть такими:

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

Так что, на самом деле, вам лучше не использовать словарь для этого вида связывания. Возможно, вместо этого попробуйте List<KeyValuePair<string, string>>.

...