2014-01-17 3 views
0

, на который он может ответить, У нас есть 2 списка, в которых словари используются как источник данных. Код для замены элемента между текстовыми полями как:C# winform listbox добавляет system.collection в список

private void btnSrc2Trg_Click(object sender, EventArgs e) 
{ 
    if (lbxSourceSite.Items.Count > 0) { 
     try { 
      string[] item = lbxSourceSite.Items[lbxSourceSite.SelectedIndex].ToString().Replace("[","").Split(','); 
      dctTargetsites.Add(item[0], item[1]); 
      dctSites.Remove(item[0]); 
      lbxSourceSite.DataSource = null; 
      lbxSourceSite.DataSource = new BindingSource(dctSites,null); 
      lbxSourceSite.DisplayMember = "Key"; 
      lbxSourceSite.ValueMember = "Value"; 
      lbxTargetSite.DataSource = null; 
      lbxTargetSite.DataSource = new BindingSource(dctTargetsites, null); 
      lbxTargetSite.DisplayMember = "Key"; 
      lbxTargetSite.ValueMember = "Value"; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.GetBaseException().Message.ToString()); 
     } 
    } 

} 

private void btnTrg2Src_Click(object sender, EventArgs e) 
{ 
    if (lbxTargetSite.Items.Count > 0) { 
     try{ 
      string[] item = lbxTargetSite.Items[lbxTargetSite.SelectedIndex].ToString().Replace("[", "").Split(','); 
      dctSites.Add(item[0], item[1]); 
      dctTargetsites.Remove(item[0]); 

      lbxTargetSite.DataSource = null; 
      lbxTargetSite.DataSource = new BindingSource(dctTargetsites, null); 
      lbxTargetSite.DisplayMember = "Key"; 
      lbxTargetSite.ValueMember = "Value"; 

      lbxSourceSite.DataSource = null; 
      lbxSourceSite.DataSource = new BindingSource(dctSites, null); 
      lbxSourceSite.DisplayMember = "Key"; 
      lbxSourceSite.ValueMember = "Value"; 
     }catch(Exception ex){ 
      MessageBox.Show(ex.GetBaseException().Message.ToString());    
     } 
    } 
} 

После добавления последнего элемента в целевой текстовое поле и удаление из исходного текстового поля (или наоборот), то элемент, как показано, как «system.collection», это может быть связанными с перевязывающими словарями как источниками данных после операции, как я могу избавиться от него? Или любой другой соответствующий метод использования словарей для ListBox приветствуется, Спасибо за вашу заботу

+0

вы должны значения словаря в качестве элементов в ListBox? –

+0

Привет, csharper, спасибо за ответ, я планирую использовать целевой словарь в качестве входных данных для какой-либо другой функции, но я открыт для любых альтернатив –

ответ

0

Представленное на дисплее элемент «system.collection» может произойти becaus вы используете

string[] item = lbxSourceSite.Items[lbxSourceSite.SelectedIndex].ToString().Replace("[","").Split(','); 

причем способ ToString() вернется вы являетесь именем типа данных выбранного элемента -> system.collection.

Вы могли бы использовать:

string[] item = lbxSourceSite.Items[lbxSourceSite.SelectedIndex].Text.Replace("[","").Split(','); 

или даже:

string[] item = lbxSourceSite.Items[lbxSourceSite.SelectedIndex].Value.ToString().Replace("[","").Split(','); 

Вы должны изменить это в обоих ListBoxes :)

+0

привет, спасибо за ответ, но .text или .value, похоже, не являются свойствами это, только 4 метода: tostring, equals, gethashcode и gettype –

+0

um ... хорошо хорошо: D извините. возможно, msdn [link] (http://msdn.microsoft.com/de-de/library/system.windows.forms.listbox.items.aspx) может вам помочь. – Toby

+0

np :) mein deutsch is nicht sehr gut aber vielen dank. :) –

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