将ListView转换为行分隔的字符串数组,反之亦然

时间:2015-07-09 13:37:33

标签: c# wpf

我正在尝试获取ListView中的所有项目,并将每个项目写入字符串数组(或类似内容)中的新行。这样我就可以将这些值传递给对象内的字符串属性,然后将其保存到SQL数据库(Varchar(max))。

我试过的是什么?

public string ConvertToString(ListView l)
        {
            ArrayList list = new ArrayList();

            foreach (string item in l.Items)
            {
                list.Add(item);
            }

            return list.ToString();
        }

但我显然错过了我正在努力解决的换行问题。 当前代码仅将“System.Collections.ArrayList”保存到数据库中。

我也做了很多谷歌搜索并继续遇到“string []”但这没有什么好处,因为我必须预定义长度,我不知道,因为当项目被添加到ListView时它会不断变化。

从数据库读取值时,我还需要一个反向方法,将每一行放回ListView。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

StringBuilder完美地保存了CR / LF字符。

  public string ConvertToString(ListView l)
  {
     StringBuilder list = new StringBuilder();

     foreach (string item in l.Items)
        list.AppendLine(item);

     return list.ToString();
  }

反向类似:

  public voidConvertToString(ListView l, string dbString)
  {
     string [] sep = {"\r\n"};
     foreach (string item in dbString.Split(sep, StringSplitOptions.None))
        l.Items.Add(item);
  }

答案 1 :(得分:0)

我实现了这个函数来转换为String数组:

        /// <summary>
        /// Convert a ListView to an array of string
        /// </summary>
        /// <param name="ListView1"></param>
        /// <returns>an array of strings</returns>
        private string[] ConvertToArray(ListView ListView1)
        {
            string[] array = new string[ListView1.Items.Count];
            for (int i = 0; i <= ListView1.Items.Count - 1; i++)
            {
                array[i] = ListView1.Items[i].Text;
            }
            return array;
        }   

反向解决方案可能类似。