我有一段代码,只需点击一下按钮,用户就可以从他们的仓库中选择一个.csv文件。在此之后,文件将使用其内容填充datagridview。
public void button1_Click(object sender, EventArgs e)
{
string delimiter = ",";
string tablename = "AudioTable";
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)
{
string filename = openFileDialog1.FileName;
StreamReader sr = new StreamReader(filename);
string csv = File.ReadAllText(openFileDialog1.FileName);
dataset.Tables.Add(tablename);
dataset.Tables[tablename].Columns.Add("QID");
dataset.Tables[tablename].Columns.Add("Text");
;
string allData = sr.ReadToEnd();
string[] rows = allData.Split("\r".ToCharArray());
foreach (string r in rows)
{
string[] items = r.Split(delimiter.ToCharArray());
dataset.Tables[tablename].Rows.Add(items);
}
this.dataGridView1.DataSource = dataset.Tables[0].DefaultView;
MessageBox.Show(filename + " was successfully imported.", "Successful", MessageBoxButtons.OK);
}
}
}
通过在datagridview中一致地显示数据,此代码运行良好,但是,当您尝试上载第二个不同的.csv时,此文件数据将覆盖第一个.csv中的现有数据。是否有任何可能的方法来更改它,以便它不会覆盖datagridview中的现有数据,而只是将其附加到现有数据下面的新行中。为了让它更加清晰,第一次用户上传一个.csv时,datagridview中没有现有的数据,所以它加载正常,但是如果同一个用户想要在第一个那个上传第二个.csv后第一个那个来自第一个.csv将被覆盖。我已经搜索并看到了一些与基于网络的解决方案中的数据表类似的问题但不确定如何翻译以适合我自己的问题。
由于
答案 0 :(得分:0)
您可以向数据集添加更多列,然后调用this.dataGridView1.DataSource = dataset.Tables [0] .DefaultView;试。
答案 1 :(得分:0)
每次尝试执行此操作时,都使用相同的数据集,并在之前创建新数据集。这就是数据被覆盖的原因
将要添加到datagridview数据源的内容保存到数据表中,然后将它们合并到datagridview数据源中
DataTable dt2 = new DataTable();
// fill your table
(dataGridView1.DataSource as DataTable).Merge(dt2);