0

我对编程很陌生,我通常从 YouTube 上的课程或直接从 Youtube 上学习教程。我的问题是我想从 CSV 文件加载文件,然后将加载的文件更新到 DataGridView。但是要这样做,我正在遵循一个教程,但我不知道要使用什么表。

private void btnOtvor_Click(object sender, EventArgs e)
        {
            try
            {
                using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "CSV|*.csv", ValidateNames = true, Multiselect = false })
                {
                    if (ofd.ShowDialog() == DialogResult.OK)
                    dataGridViewZamestnanci.DataSource = Readcsv(ofd.FileName);                                     
                    labelErrMsg.Text = "Subor otvoreny spravne";
                    labelErrMsg.ForeColor = System.Drawing.Color.Green;
                    timer1.Start();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

但是当我创建添加按钮时:

private void btnPridat_Click(object sender, EventArgs e)
        {
            dataGridViewZamestnanci.Rows.Add(textBoxMeno.Text, textBoxTel.Text, textBoxProfesia.Text, textBoxTpp.Text);
            dataGridViewZamestnanci.DataSource = dataGridViewZamestnanci;

它没有看到 DatagridviewZamestnanci,应该有数据表,但由于我直接从 CSV 文件加载它,所以我很困惑,老实说迷路了......

有人可以帮我吗?

4

1 回答 1

0

正如我评论的那样,您将收到一条错误消息,指出... “您不能以编程方式将行添加到数据绑定的网格中。” ...如果您尝试执行该行代码...</p>

dataGridViewZamestnanci.Rows.Add(textBoxMeno.Text, textBoxTel.Text, textBoxProfesia.Text, textBoxTpp.Text);

你会得到这个错误。

但是,由于您声称网格数据源是 a DataTable,那么您可以将网格“转换”DataSource为 a DataTable,然后将新行添加到“that”,DataTable而不是直接将行添加到网格中。这种变化可能看起来像……</p>

DataTable dt = (DataTable)dataGridViewZamestnanci.DataSource;
dt.Rows.Add(textBoxMeno.Text, textBoxTel.Text, textBoxProfesia.Text, textBoxTpp.Text);

如果代码要在网格中添加/更新/删除行,那么将网格DataSource设置为“全局”变量可能会更容易。然后,您可以避免每次要添加行时将网格“投射”DataSource到 a 。DataTable为此,您将定义一个DataTable名为...的全局变量GridDT……</p>

DataTable GridDT;

然后,在当前代码中,更改……</p>

dataGridViewZamestnanci.DataSource = Readcsv(ofd.FileName);

到……</p>

GridDT = Readcsv(ofd.FileName);
dataGridViewZamestnanci.DataSource = GridDT;

那么上面的第二个代码片段可以简化为……</p>

GridTDT.Rows.Add(textBoxMeno.Text, textBoxTel.Text, textBoxProfesia.Text, textBoxTpp.Text);

我希望这是有道理的。

于 2021-07-01T21:47:19.157 回答