无法将项集合加载到包含2列的列表视图框中

时间:2016-12-13 01:26:14

标签: c# json winforms

所以我正在创建一个货币转换器程序,它从云端获取一大堆国家/地区的实时货币信息,并在列表视图框中显示实时数据以及转换。我已在业务层中正确设置了所有内容(使用JSON),并且在运行时,我成功查看了数据。因此我无法获取该数据并将其加载到列表视图框中。这是表单的代码......

    namespace BigBirtha
{
    public partial class Form1 : Form
    {
        private ExchangeRateService exchangeRates;

        public Form1()
        {
            InitializeComponent();
            exchangeRates = new ExchangeRateService();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var exchange = exchangeRates.GetExchangeRates();
            countryListView.Items.AddRange(exchange.ToArray()); //Believe this is the issue
        }
    }
}

ExchangeRateService使用JSON并通过一个工作正常的列表返回费率。从云中提取172个项目,每个项目返回CurrencyCode和Rate。

我只是想把这些项目填充到一个名为countryListView的列表视图框中,其中有两列名为countryHeader和rateHeader。

获取错误代码CS1503参数1:无法从'BigBirtha.models.ExchangeRate []'转换为'System.Windows.Forms.ListViewItem []'

P.S。如果它有帮助,这是我创建的另一个有助于提取数据的类。

    namespace BigBirtha
{
    class ExchangeRateService
    {
        private const string EXCHANGE_URL = ""; //removed this 
        public List<ExchangeRate> GetExchangeRates()
        {
            List<ExchangeRate> rates = new List<ExchangeRate>();

            using (WebClient client = new WebClient())
            {
                var json = client.DownloadString(EXCHANGE_URL);
                var response = JsonConvert.DeserializeObject<ExchangeRatesResponse>(json);

                foreach (var rate in response.Rates)
                {
                    var exchangeRate = new ExchangeRate
                    {
                        CurrencyCode = rate.Key,
                        Rate = rate.Value
                    };
                    rates.Add(exchangeRate);
                } 
            }
            return rates;
        }
    }
}

已经给出了尝试此代码的建议......

    var listViewItemsOfExchangeRates= new ListViewItem(exchange.ToArray();
    countryListView.Items.Add(listViewItemsOfExchangeRates);

收到以下非常相似的错误....

CS1503 Argument 1:  cannot convert from `"System.Collections.Generic.List<BigBirtha.models.ExchangeRate>" to "string"`

感谢阅读!

1 个答案:

答案 0 :(得分:1)

它正是它所说的,这意味着您只能向listItem控件添加listview类型的集合,并且您正在尝试添加类型为array的集合。

我建议您查看此MSDN文章,从此处https://msdn.microsoft.com/en-us/library/system.windows.forms.listview(v=vs.110).aspx

为列表视图控件设置数据源

基于MSDN文章的示例代码

var listViewItemsOfExchangeRates= new ListViewItem(exchange.ToArray());
countryListView.Items.Add(listViewItemsOfExchangeRates);

未经测试,请相应修改

根据评论进行修改 - 以上代码与winforms相关

最后我知道并使用winforms,ListView不支持数据绑定。但是,可以对新的WPF ListBox进行数据绑定。或者使用listBox而不是

本文介绍如何将数据绑定功能添加到从WinForms ListView继承的自定义控件:https://www.codeproject.com/kb/list/listview_databinding.aspx