通过BindingSource向DataGridView添加新条目
问题描述:
美好的一天,通过BindingSource向DataGridView添加新条目
我正在写一个PasswordManager,并且坚持向我的DataGridView添加新行。
你可以看到我的代码在这里:PassMangaer
发动机/ NewEntry.cs有创建一个新的条目并将其添加到BindingSource的代码。 之后,PassManger/frmAddNewEntry.cs将其添加到主窗体上的DataGridView并刷新DataGridView。
实际上,它只是用新的行替换当前行,并没有,因为它应该添加一个新行。
我在这里错过了什么?
答
你的问题在frmAddNewEntry,第18行,当你创建BindingSource Bs = new BindingSource()。 btnAddEntry_Click适用于空Bs。 我的建议:
- PassManager。除去管线18
公共无效addNewEntry(BindingSource的BS,INT标识,串主控器)
私人无效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;
}
谢谢您的回答,但如果我删除18行,我怎么传实际的BindingSource? – Smarc
好的,现在我有点困惑。我得到你的新功能,这对我来说很有意义。但现在我得到一个 System.NullReferenceException:'对象引用未设置为对象的实例。' bs为空。 in NewEntry.cs – Smarc
在方法中使用mainForm.Bs作为参数。告诉我你的addNewEntry,你怎么称呼它 –