C# 我能';我似乎不明白为什么datagridview没有被填充。(此外,跟踪时出现了一个奇怪的错误)
我试图从SQLite数据库中提取数据,第一个DGV加载得很好,但第二个没有。调试时,我得到以下结果: -Current“this.specListing.Current”引发了类型为“System.IndexOutOfRangeException”的异常对象{System.IndexOutOfRangeException} this.specListing是一个BindingSource。更具体的错误是“索引-1没有值”,有2项(计数:2) 代码是:C# 我能';我似乎不明白为什么datagridview没有被填充。(此外,跟踪时出现了一个奇怪的错误),c#,winforms,datagridview,C#,Winforms,Datagridview,我试图从SQLite数据库中提取数据,第一个DGV加载得很好,但第二个没有。调试时,我得到以下结果: -Current“this.specListing.Current”引发了类型为“System.IndexOutOfRangeException”的异常对象{System.IndexOutOfRangeException} this.specListing是一个BindingSource。更具体的错误是“索引-1没有值”,有2项(计数:2) 代码是: public frmClassEditor(
public frmClassEditor()
{
//start listing
InitializeComponent();
this.clsList = new List<SQLiteDataPair>();
this.specList = new List<pilotSpec>();
//create binding sources
this.clsListing = new BindingSource();
this.specListing = new BindingSource();
//updated lags
this.updatedSpec = true;
//update listing
updatePilotListing();
this.clsListing.DataSource = this.clsList;
this.specListing.DataSource = this.specList;
dgvPilotListing.DataSource = this.clsListing;
dgvPilotSpec.DataSource = this.specListing;
refreshDGVPilot();
}
private void refreshDGVSpec()
{
this.specListing.ResetBindings(false);
if (dgvPilotSpec.Columns.Count > 0)
{
//do nothing right now
}
}
private void updatePilotSpecLst(SQLiteConnection conn, long classID)
{
this.specList.Clear();
SQLiteCommand getPilotSpec = conn.CreateCommand();
getPilotSpec.CommandText = "SELECT * FROM classSpec WHERE classID = " + classID;
SQLiteDataReader rdr = getPilotSpec.ExecuteReader();
while (rdr.Read())
{
this.specList.Add(new pilotSpec(rdr.GetInt64(0), rdr.GetString(1), txtClassName.Text, rdr.GetInt64(2)));
}
refreshDGVSpec();
}
我想不出来。能否将刷新网格方法更新为:
private void refreshDGVSpec()
{
CurrencyManager currencyManager = (CurrencyManager)this.BindingContext[dgvPilotSpec.DataSource];
currencyManager.Refresh();
}
编辑:您的类成员需要具有公共属性:
更改公共长飞行员等级
到公共长飞行员specid{get;set;}
对所有公共成员变量执行相同操作。在哪一行获得错误?没有一个。我只是在逐行检查refreshDGVSpec()时才发现了datagrid,试图找到任何不寻常的东西。它出现在这个.specListing.resetBindings(false)上,担心它不起作用。(我注意到添加第二个.Refresh()会清除错误。)dgvPilotSpec上的列和行仍然为空。您是否可以调试并查看是否有任何新元素添加到specList?specList(列表)和specListing(绑定源)都显示这两个对象。让我看看我可以在哪里添加第三个并调用刷新。我已经添加了一行,插入到db和list以及currencyManager中,但它仍然将dgv保留为空白(编辑以修复拼写错误)。您可以从list更改为BindingList并进行检查吗。
private void refreshDGVSpec()
{
CurrencyManager currencyManager = (CurrencyManager)this.BindingContext[dgvPilotSpec.DataSource];
currencyManager.Refresh();
}