2017-09-24 98 views
0

美好的一天,通过BindingSource向DataGridView添加新条目

我正在写一个PasswordManager,并且坚持向我的DataGridView添加新行。

你可以看到我的代码在这里:PassMangaer

发动机/ NewEntry.cs有创建一个新的条目并将其添加到BindingSource的代码。 之后,PassManger/frmAddNewEntry.cs将其添加到主窗体上的DataGridView并刷新DataGridView。

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

我在这里错过了什么?

回答

1

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

  1. PassManager。除去管线18
  2. 公共无效addNewEntry(BindingSource的BS,INT标识,串主控器)

  3. 私人无效btnAddEntry_Click(对象发件人,EventArgs的) { 串主控器= textBox1.Text; ne.addNewEntry(mainForm.Bs,1,hoster); mainForm.RefreshDGV(); this.Close(); }

不推荐使用,但一个将是你最后的评论快速烫:

 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; 
    } 
+0

谢谢您的回答,但如果我删除18行,我怎么传实际的BindingSource? – Smarc

+0

好的,现在我有点困惑。我得到你的新功能,这对我来说很有意义。但现在我得到一个 System.NullReferenceException:'对象引用未设置为对象的实例。' bs为空。 in NewEntry.cs – Smarc

+0

在方法中使用mainForm.Bs作为参数。告诉我你的addNewEntry,你怎么称呼它 –