0

关于如何阅读文本文件等有很多主题,我觉得我已经阅读了所有主题。但我无法将其应用于我的问题。

我有一个看起来像这样的文本文件:

ProductID,Product,CustomerID,lineone,linetwo,linethree AABBCC,banana,K001,something,something,something BBCCAA,apples,K002,something1,something2,something3 AACCBB,oranges,K003,something4,something5,something6 CCAABB,banana,K001,某事,某事,某事

我有一个表单(Form1),其中有一个文本框(tbCustomerID)和一个 dataGridView(dgvProducts)。

我想要做的是我想在 Form1 的文本框中填写 CustomerID 然后我想遍历文本文件中的所有 CostumerID,然后在具有 6 列的预定义 dataGridView 中显示 ProductID 和 Product。(ProductID 和 Product = 第 1 列和第 2 列)

我的第一次尝试:(来自普通班级)

    public DataTable ReadFromFile()
    {            
        //Read the data from text file
        string[] textData = File.ReadAllLines("MyTextFile.txt");
        string[] headers = textData[0].Split(',');

        //Create and populate DataTable
        DataTable dataTable1 = new DataTable();
        foreach (string header in headers)
            dataTable1.Columns.Add(header, typeof(string), null);
        for (int i = 1; i < textData.Length; i++)
            dataTable1.Rows.Add(textData[i].Split(','));            

        return dataTable1;

    }

然后在我的Form1中:

    Form1 frm1 = new Form1();

    private void button_Click(object sender, EventArgs e)
    {

        dgvProducts.DataSource = frm1.ReadFromFile();            
    }

但这只是将文本文件中的所有项目显示到 dataGridView 中。

尝试2:(来自我的班级)

    public string findCustomer(string CustomerID)
    {
        StreamReader sr = new StreamReader("MyTextFile.txt");
        string searchId = CustomerID;
        string actualId = "";
        string produktID = "No match found";
        string[] details = null;
        string line = null;
        while ((line = sr.ReadLine()) != null)
        {
            line = line.Trim();
            if (line == "") continue;
            details = line.Split(',');
            actualId = (details[0]);
            if (actualId == searchId)
            {
                productID = details[2].Replace("\"", "");
                break;
            }
        }
        sr.Close();
        return productID;
    }

然后在 Form1

    Form1 frm1 = new Form1();
    private void button_Click(object sender, EventArgs e)
    {
        string aa = tbKundID.Text;
        dgvProducts.Rows.Add(frm1.findCustomer(aa));            
    }

但是通过这种方式,我只能从文本文件的第 2 列中获取一个值,因为我无法在 c# 中返回两个值。我还尝试从文本文件中读取所有行,然后划分所有列,然后以某种方式显示一些我想显示的特定内容,但我无法通过搜索或添加到 dataGridView..这是我最后的手段,所以我非常感谢有关我应该如何以最简单的方式做到这一点的帮助。

4

2 回答 2

0

编辑您的第一次尝试:

Form1 frm1 = new Form1();

private void button_Click(object sender, EventArgs e)
{
    dgvProducts.DataSource = frm1.ReadFromFile(tbCustomerID.Text);  <-- pass customer id       
}

public DataTable ReadFromFile(String customerId)
{            
    //Read the data from text file
    string[] textData = File.ReadAllLines("MyTextFile.txt");
    string[] headers = textData[0].Split(',');

    //Create and populate DataTable
    DataTable dataTable1 = new DataTable();
    foreach (string header in headers)
        dataTable1.Columns.Add(header, typeof(string), null);
    for (int i = 1; i < textData.Length; i++)
       if textData[i].Split(',')[2].ToString() == customerId <-- add the row only if customer Id matches
         dataTable1.Rows.Add(textData[i].Split(','));            

    return dataTable1;

}
于 2013-10-10T19:51:40.440 回答
0

感谢 @monkyxyz 解决您的 DataTable 方法。

就个人而言,我更喜欢尽可能地保持 OOP 并发现 DataTables 不太灵活(除非问题范围保持简单和静态)。

另一种选择是将文本文件反序列化为对象,并根据需要传递对象。我假设您可以轻松地将对象绑定到 DataGridView。

除非您指出需要,否则我将省略所有代码。

但是要让事情顺利进行:

于 2013-10-10T22:39:35.437 回答