c#将TEXT文件中的特定列添加到DataGridView

时间:2014-09-25 09:44:53

标签: c# datagridview datagrid

enter image description here

大家好,

如上图所示,我想从文本文件中逐列添加十进制数字到datagrid控件。

以下是我的代码段

List<string> str = new List<string>();
        String st = "";
        int k = 0;
        string[] s ;
        //Path to write contents to text file
        string filename = @"E:\Vivek\contentcopy\clientlist.txt";
        Form.CheckForIllegalCrossThreadCalls = false;
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.FileName = "";

        ofd.ShowDialog();
        st = ofd.FileName;

        if (string.IsNullOrEmpty(ofd.FileName))
            return;
        string Name = "", No1 = "",No2="";
        string[] lines = File.ReadAllLines(st).Where(sw => !string.IsNullOrWhiteSpace(sw)).ToArray();
        for (int i = 0; i < lines.Length; i++)
        {

            if (lines[i].Contains("VENTURA SECURITIES LIMITED (NSE F&O)")) continue;
            if (lines[i].Contains("ALL EXCHANGES DERIVATIVES CLIENTWISE STATEMENT AS ON 16-05-2012")) continue;
            if (lines[i].Contains("-------------------------------------------------------")) continue;
            s = lines[i].Split(' ');
            if (s[0] == "PARTY" || s[0] == "") continue;
            int z;
            Name = "";

            for (z = 1; z < s.Length; z++)
            {
                if (s[z] == "") continue;                    
                if (s[z].Contains('.'))
                {
                    No1+=s[z]+" ";
                    No2 = No1 + " ";  

                } 
                else
                {
                    Name += s[z];
                    str.Add(s[0]+"  "+Name);

                }



            }

            dataGridView1.Rows.Add();
            dataGridView1.Rows[k].Cells[0].Value = s[0];
            dataGridView1.Rows[k].Cells[1].Value = Name;
            dataGridView1.Rows[k].Cells[2].Value = No1;
            dataGridView1.Rows[k].Cells[3].Value =  No2;
            k++;
        }


        File.WriteAllLines(filename, str);
        dataGridView1.ReadOnly = true;
    }

No1 = s [z]行直接取最后一列值,即46,123.19等等。我想从文本文件中获取每一列并将其存储在一个字符串变量中,然后将其分配给datagrid视图 我希望我的怀疑是清楚的。如果不是,请让我知道

5 个答案:

答案 0 :(得分:2)

让我们说,你有测试文件中的行,那么你需要做以下事情:

  1. 使用StreamReader.ReadLine(),一次读取一行。
  2. 使用拆分(&#39;&#39;)溢出该行并将其存储在数组
  3. 从阵列中删除所有空的
  4. 现在,结果数组的索引2,3,4,5,6将具有等效于十进制数字的字符串。
  5. 对每个StreamReader.ReadLine()
  6. 重复此操作

    希望这会有所帮助。

答案 1 :(得分:2)

这是最简单的解决方案:

将DataGrid视图添加到表单并添加一个按钮:

 private void button1_Click(object sender, EventArgs e)
    {
        ReadAndFileter();
    }
    private void ReadAndFileter()
    {
        try
        {
            using(System.IO.StreamReader reader = new System.IO.StreamReader("file.txt"))
            {
                string line;
                string []array;
                int rowcount= 0;
                decimal number;
                string[] separators = { "\t", " " };
                int columnCount = 0;
                while ((line = reader.ReadLine()) != null)
                {

                   array = line.Split(separators, StringSplitOptions.RemoveEmptyEntries); 
                   dataGridView1.Rows.Add();
                   foreach  (string str in array)
                   {

                       if (Decimal.TryParse(str,out number))
                       {
                           dataGridView1.Rows[rowcount].Cells[columnCount++].Value = number;                               
                       }                           
                   }
                   rowcount++;
                   columnCount = 0;
                }
            }
        }
        catch (Exception ex)
        {
        }
    }

文件内容为:

Abc         20.122      69.33   0.00        693.25  0.00
def         36.20       96.20   1.15        69.56   8.96

最终输出: Image

答案 2 :(得分:1)

您的问题是每次读取字符串时都会覆盖No1,这就解释了为什么您只获取最后一个值。你可以做的是;

附加字符串:

   No1 += s[z] + " ";

将所有值放在彼此之后,用空格分隔。

或者,您可以创建List<String>并将每个值添加到列表中,这意味着您将它们分开存储:

   List<String> values = new List<String>();
   foreach(...)
   {
      if (s[z] == "") continue;                    
      if (s[z].Contains('.'))
      {
            values.Add(s[z])
      } 
      else
      {
             Name += s[z];
             str.Add(s[0] + "  " + Name);
      }
   }

此后,您可以遍历列表并将每个值添加到行中。考虑你的代码片段;

int i = 2;
foreach(string value in values)
{
   dataGridView1.Rows[k].Cells[i].Value = value;
   i++;
}

这应该有用。

希望这有帮助。

答案 3 :(得分:1)

这是编辑过的代码:但是为了将来我必须建议至少尝试一下..

private void ReadAndFileter1()
    {
        try
        {
            using (System.IO.StreamReader reader = new System.IO.StreamReader("file.txt"))
            {
                string line;
                string[] array;
                int rowcount = 0;
                decimal number;
                string[] separators = { "\t", " " };
                int columnCount = 1;
                string[] lines = File.ReadAllLines("file.txt");
                for (int i = 0; i < lines.Length; i++)
                {
                    if (lines[i].Contains("VENTURA SECURITIES LIMITED (NSE F&O)")) continue;
                    if (lines[i].Contains("ALL EXCHANGES DERIVATIVES CLIENTWISE STATEMENT AS ON 16-05-2012")) continue;
                    if (lines[i].Contains("-------------------------------------------------------")) continue;

                    array = lines[i].Split(separators, StringSplitOptions.RemoveEmptyEntries);
                    if (array[0] == "PARTY" || array[0] == "") continue;

                    dataGridView1.Rows.Add();
                    foreach (string str in array)
                    {
                        if (Decimal.TryParse(str, out number))
                        {
                            dataGridView1.Rows[rowcount].Cells[columnCount++].Value = number;
                        }
                    }
                    dataGridView1.Rows[rowcount].Cells[0].Value = array[0];
                    rowcount++;
                    columnCount = 1;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

Grid's Columns

答案 4 :(得分:1)

这是:

static void Main(string[] args)
    {
        Decimal result;
        string[] splitchar = new string[]{" "};

        using(StreamReader reader = new StreamReader(@"C:\Users\Dell\Desktop\input.txt"))
        {
            while(!reader.EndOfStream)
            {
                string[] splittedArray = reader.ReadLine().Split(splitchar,                      StringSplitOptions.RemoveEmptyEntries).Where(x => Decimal.TryParse(x, out result)).ToArray();

                // put your code here to get insert the values in datagrid
            }
        }

    }