C# 我能';我似乎不明白为什么datagridview没有被填充。(此外,跟踪时出现了一个奇怪的错误)

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(

我试图从SQLite数据库中提取数据,第一个DGV加载得很好,但第二个没有。调试时,我得到以下结果:

-Current“this.specListing.Current”引发了类型为“System.IndexOutOfRangeException”的异常对象{System.IndexOutOfRangeException}

this.specListing是一个BindingSource。更具体的错误是“索引-1没有值”,有2项(计数:2)

代码是:

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();
}