通过BindingSource向DataGridView添加新条目

时间:2017-09-24 16:51:40

标签: c# winforms datagridview

美好的一天,

我现在正在编写一个PasswordManager,而且我一直在向DataGridView添加新行。

您可以在此处查看我的代码:PassMangaer

Engine / NewEntry.cs具有创建新条目并将其添加到BindingSource的代码。 之后,PassManger / frmAddNewEntry.cs将其添加到主Form上的DataGridView并刷新DataGridView。

实际上它只是用新的行替换了当前行,并且没有,因为它应该添加一个新行。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

你的问题在frmAddNewEntry第18行,当你的创建BindingSource Bs = new BindingSource()时。 btnAddEntry_Click适用于空B。 我的建议是:

  1. PassManager。删除第18行
  2. public void addNewEntry(BindingSource bs,int id,string hoster)

  3. private void btnAddEntry_Click(object sender,EventArgs e)     {         string hoster = textBox1.Text;         ne.addNewEntry(mainForm.Bs,1,hoster);         mainForm.RefreshDGV();         this.Close();     }

  4. 不建议使用,但对于您的上一条评论,这将是快速热修复:

            public void LoadData(DataGridView grid)
        {
            DataTable dataTable = new DataTable();
            foreach (DataGridViewColumn col in grid.Columns)
            {
                dataTable.Columns.Add(new DataColumn(col.Name));
            }
            string file = "mygrid.bin";
            using (BinaryReader bw = new BinaryReader(File.Open(file, FileMode.Open)))
            {
                int n = bw.ReadInt32();
                int m = bw.ReadInt32();
                for (int i = 0; i < m; ++i)
                {
                    dataTable.Rows.Add();
                    for (int j = 0; j < n; ++j)
                    {
                        if (bw.ReadBoolean())
                        {
                            dataTable.Rows[i][j] = bw.ReadString();
                            dataTable.Rows[i][j] = Base64Decode(dataTable.Rows[i][j].ToString());
                        }
                        else bw.ReadBoolean();
                    }
                }
            }
            grid.DataSource = dataTable;
        }