c#winform listbox将system.collection添加到listbox

时间:2014-01-17 08:39:30

标签: c# .net winforms dictionary listbox

它可能会回应谁, 我们有2个使用字典作为数据源的列表框。在文本框之间交换元素的代码如下:

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”,它可能与操作后重新绑定字典作为数据源有关,怎么能我摆脱它? 或者欢迎任何其他使用字典列表框的正确方法, 感谢您的关注

1 个答案:

答案 0 :(得分:0)

显示的元素“system.collection”可能因为您正在使用

而发生
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(',');

您必须在两个列表框中更改此内容:)