我如何将项目添加到listView所以我会看到他们每两行一个在另一个下?

时间:2014-01-29 04:15:21

标签: c# winforms listview

我有这段代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace RssNewsFeeder
{
    public partial class Form1 : Form
    {
        int lastIndex;
        string readableRss;
        private List<string> lines = new List<string>();

        public Form1()
        {
            InitializeComponent();

            readableRss = RssReader.covertRss("http://rotter.net/rss/rotternews.xml");

            lines = Regex.Split(readableRss, "\r\n")
                               .Where(str => !string.IsNullOrEmpty(str))
                               .ToList();
            for (int i = 0; i < lines.Count; i++)
            {
                listView1.Items.Add(lines[i]);
            }
        }

当我使用断点时,我看到这些行包含100个索引。 例如,在索引0中我有:פרשתאיילגולן:כךהודוהקטינות - “שיקרנו" 然后在索引1我有:星期三,2014年1月29日06:01:56 +0200

然后在索引2中我有:“你好这是一个文本” 在索引3中,我看到:周三,2014年1月29日06:01:56 +0200

行的每个文本索引都有自己的日期和时间。

所以在listView1中我希望以这种格式从上到下连续看到这个索引:

大家好 星期三,2014年1月29日06:01:56 +0200

大家好 星期三,2014年1月29日06:01:56 +0200

这是一个测试 星期三,2014年1月29日06:01:56 +0200

此格式。

我该怎么办?如果我只是按照我的方式使用它现在将行添加到listView1我看到它是这样的:

enter image description here

如何将其更改为我想要的格式?

编辑**

现在试过这个:

listView1.Columns.Add("Message", 300, HorizontalAlignment.Left);
            listView1.Columns.Add("Date", 300, HorizontalAlignment.Left);
            readableRss = RssReader.covertRss("http://rotter.net/rss/rotternews.xml");

            lines = Regex.Split(readableRss, "\r\n")
                               .Where(str => !string.IsNullOrEmpty(str))
                               .ToList();
            for (int i = 0; i < lines.Count; i += 2)
            {
                ListViewItem item = new ListViewItem();
                item.Text = lines[i];
                item.SubItems.Add(lines[i + 1]);
                listView1.Items.Add(item);
            }

结果如前:

enter image description here

仍然不好。

编辑**

这是我现在使用的代码:

listView1.Columns.Add("Message", 300, HorizontalAlignment.Left);
        listView1.Columns.Add("Date", 300, HorizontalAlignment.Left);
        readableRss = RssReader.covertRss("http://rotter.net/rss/rotternews.xml");

        lines = Regex.Split(readableRss, "\r\n")
                           .Where(str => !string.IsNullOrEmpty(str))
                           .ToList();
        StringBuilder strToAddToList = new StringBuilder();

    for (int i = 0; i < lines.Count; i++)
    {
        if (i % 2 == 0)
        {
            strToAddToList.Append(lines[i]);
            continue;
        }

        if (i % 2 != 0)
        {
            strToAddToList.Append(" ");
            strToAddToList.Append(lines[i]);
            listView1.Items.Add(strToAddToList.ToString());//You can replace this with your ListView.Add code
            strToAddToList.Clear();
        }
    }

仍然没有像我想的那样工作。

listView1中的格式应为:

文本 日期和时间

文本 日期和时间

文本 日期和时间

如果其中一个文本行太长,那么它应该自动拆分为一个新行:

文本 其余的文字 日期和时间

但事实上,我没有看到文本只是其中的一部分,它看起来像listView1中的行,但是从一边到另一边,我没有看到每个文本的日期和时间。

变量readableRss的格式为:

תוכניתקרי:ירושליםהמזרחיתבירתפלסטין 星期三,2014年1月29日09:45:52 +0200

הערביםקוראיםלפגועב'סיבובהשערים'האמורלהתקייםמחר 星期三,2014年1月29日09:38:23 +0200

הסיטואציהבסוריה:עימותיםצמודיגדרברמה''ג 星期三,2014年1月29日09:36:22 +0200

טורקיה:הצבאהטורקיחופרתעלותבעומק4מטריםלאורךהגבולהסוריבאזור''אלראעי''。 星期三,2014年1月29日09:35:26 +0200

所以也许不需要变量行,我们可以直接使用字符串变量readableRss。

这是listView1中的格式。

但我一直认为它像我之前上传的图像一样混乱。

这是变量readableRss的外观图像,这就是它在listView1中的样子:

enter image description here

3 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,那么索引0处有一些文本,索引1处有一些日期,您想要将它们连接起来并将其添加到列表中。同样对于索引2和3等等。

我试图在下面的代码中解决您的问题。看看它是否符合您的需要并告诉我。

        //Dummy values for testing
        List<string> lines = new List<string>();
        lines.Add("Hello from text");
        lines.Add("Wed, 29 Jan 2014 06:01:56 +0200");
        lines.Add("Hello from text1");
        lines.Add("Wed, 29 Jan 2014 06:01:56 +0200");

        StringBuilder strToAddToList = new StringBuilder();

        for (int i = 0; i < lines.Count; i++)
        {
            if (i % 2 == 0)
            {
                strToAddToList.Append(lines[i]);
                continue;
            }

            if (i % 2 != 0)
            {
                strToAddToList.Append(" ");
                strToAddToList.Append(lines[i]);
                Console.WriteLine(strToAddToList);//You can replace this with your ListView.Items.Add code
                strToAddToList.Clear();
            }
        }

编辑:您可以通过以下两种方式将文本添加到listView(我还没有编译代码,所以请纠正任何错误):

ListViewItem item = new ListViewItem();
item.Text = strToAddToList.ToString();
listView1.Items.Add(item);

或者你在问题中的表现

listView1.Items.Add(strToAddToList.ToString());

希望这有帮助。

答案 1 :(得分:0)

您需要向ListView添加两列,如下所示:

listView1.Columns.Add("Message", 300, HorizontalAlignment.Left);
listView1.Columns.Add("Date", 300, HorizontalAlignment.Left);

然后改变你的for循环:

for (int i = 0; i < lines.Count; i+=2)
{
   ListViewItem item = new ListViewItem();
   item.Text= lines[i];
   item.SubItems.Add(lines[i+1]);
   listView1.Items.Add(item);
}

答案 2 :(得分:-1)

ListView1.Items.Add(“列表项文字”)