2010-05-01 2 views
1

У меня есть окно списка, которое заполняется с помощью диктофона. Когда я повторяю выбранные элементы с помощью следующего кода, он всегда отображает только первые элементы, выбранные - даже если первый элемент не выбран.ASP.NET lisbox - Выбран первый элемент, всегда

Вы когда-нибудь сталкивались с этим сценарием?

Не могли бы вы помочь в этом?

Эта проблема возникает, когда я использую словарь для привязки. С другой стороны, общий список работает отлично.

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

+0

Где этот код возникает в жизненном цикле страницы? – tvanfosson

+0

Это событие относится к функции, вызываемой в обработчике событий нажатия кнопки. – Lijo

+0

Так что это в обработчике кликов для кнопки? Возможно, вы захотите обновить свой вопрос с помощью большего количества окружающего кода. Здесь действительно не так много. Кроме того, не забудьте использовать кнопку «010 101» или отступить свой код на 4 пробела, чтобы получить правильное форматирование. – tvanfosson

ответ

0

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

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

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

+0

Нет. Это не сработало. Я обновил оригинальный вопрос более подробно. – Lijo

+0

It **. ** произведение. Я скопировал ваш код, переключил «Ключ» и «Ценность», и оба были выведены. Они должны быть такими. –

Смежные вопросы