如何将csv文件值与listview列对齐

时间:2014-09-28 09:00:19

标签: c#

如何将csv文件中的值与我的listview控件对齐... 我使用的代码中的问题是每个csv值仅在第一列中添加...

这是我的示例listview输出: enter image description here

第一个" 1234"需要与" asd"但在第二栏" p"

然后是第二个" 1234"需要与" dfg"但在第二栏" p"

正确的显示需要如下:

u | P

   asd   |    1234

   dfg   |   1234

" |"符号仅代表listview控件中2个值之间的边界...对不起误解..

这是我到目前为止构建的代码......

try
{

    string delimiter = ",";
    string tablename = "medTable";
    DataSet dataset = new DataSet();
    OpenFileDialog openFileDialog1 = new OpenFileDialog();
    openFileDialog1.Filter = "CSV Files (*.csv)|*.csv|All Files (*.*)|*.*";
    openFileDialog1.FilterIndex = 1;
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {


        if (MessageBox.Show("Are you sure you want to import the data from \n " + openFileDialog1.FileName + "?", "Are you sure?", MessageBoxButtons.YesNo) == DialogResult.Yes)
        {
            filename = openFileDialog1.FileName;
            StreamReader sr = new StreamReader(filename);
            string csv = File.ReadAllText(openFileDialog1.FileName);


            sr.Close();


            String[] strArray = csv.Split(new char[] { ',' });
            foreach (string strValue in strArray)
            {
                listView1.Items.Add(strValue);
            }

        }
        else
        {

        }
    }

}

catch (Exception ek)
{

}

我知道这里有很多大师都非常乐于助人...... 感谢

2 个答案:

答案 0 :(得分:0)

尝试用此块替换foreach语句

int i = 0;
string val = string.Empty;
foreach (string strValue in strArray)
{
    val += strValue + "  ";
    i++;
    if (i == 2)
    {
        listView1.Items.Add(val);
        i = 0;
        val = string.Empty;
    }

}

我希望这可以帮到你

修改 要添加2列中的项目,如您已发布的图片中所示 请使用此,我希望它工作正常

 int i = 0;
 ListViewItem item = new ListViewItem();
 foreach (string strValue in strArray)
 {
    i++;
    if (i == 1)
    {
       item = new ListViewItem();
       item.Text = strValue;
    }
    if (i == 2)
    {
        item.SubItems.Add(strValue);
        listView1.Items.Add(item);
        i = 0;
    }
 }

答案 1 :(得分:0)

您想为第二个值创建SubItem,对吧?确保ListView有两个Columns并且在Details视图中。

listView1.View = View.Details;
listView1.Columns.Add("header1");
listView1.Columns.Add("header2");

虽然我更喜欢设计师这样做..现在你可以填写它:

using System.IO;
//..
var lines = File.ReadAllLines(filename);
foreach (string line in lines)
{
    var parts = line.Split(',');
    ListViewItem lvi = new ListViewItem(parts[0]);
    lvi.SubItems.Add(parts[1]);
    listView1.Items.Add(lvi);
}

您可能希望在访问parts数组之前添加错误检查!

关于使用SubItems集合的说明:当您稍后访问它时,SubItem[1]是第二列,SubItem[0]是第一列,您实际上已将其添加为{{ 1}}!

如果您只想将两个值连接起来,那么您可以将我的代码更改为:

Item