关于如何阅读文本文件等有很多主题,我觉得我已经全部阅读过了。但我还没有把它应用到我的问题上。
我有一个看起来像这样的文本文件:
的ProductID,产品,客户ID,lineone,linetwo,linethree AABBCC,香蕉,K001,什么东西,什么东西,东西 BBCCAA,苹果,K002,something1,something2,something3 AACCBB,橘子,K003,something4,something5,something6 CCAABB,香蕉,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));
}
但是这样我只能从textfile中的第2列得到一个值,因为我不能在c#中返回两个值。 我也尝试从文本文件中读取所有行,然后划分所有列,然后以某种方式显示我想要显示的一些特定的东西,但我无法使用搜索或添加到dataGridView。 这是我的最后一招,所以我非常感谢能以最简单的方式帮助我。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
感谢@monkyxyz解决您的DataTable方法。
就个人而言,我更喜欢尽可能保持OOP并且发现DataTables的灵活性较低(除非问题范围保持简单和静态)。
另一种选择是将文本文件反序列化为对象,并根据需要传递对象。我假设您可以轻松地将对象绑定到DataGridView。
我会遗漏所有代码,除非你表明你需要它。
但为了让事情滚动: