Winforms 无法将项添加到只读或固定大小的列表中

Winforms 无法将项添加到只读或固定大小的列表中,winforms,bindingsource,Winforms,Bindingsource,我正在使用bindingsource。问题是,当我在绑定源代码中执行AddNew()时,它会给我一个异常项不能添加到只读或固定大小的列表中。此表单是对话框。为了便于您审阅,我添加了代码 主表单代码 private void bindingNavigatorAddNewItem_Click_1(object sender, EventArgs e) { try { this.Validate(); _earning = (Earning)this.e

我正在使用bindingsource。问题是,当我在绑定源代码中执行
AddNew()
时,它会给我一个异常
项不能添加到只读或固定大小的列表中。
此表单是对话框。为了便于您审阅,我添加了代码

主表单代码

private void bindingNavigatorAddNewItem_Click_1(object sender, EventArgs e)
{
    try
    {
        this.Validate();
        _earning = (Earning)this.earningBindingSource.Current;
        string EmpNo = Convert.ToString(_earning.Empno == null || _earning.Empno == string.Empty ? "0" : _earning.Empno);
        Incomes.frmIncomeAddList _earnEmployee = new Incomes.frmIncomeAddList();
        _earnEmployee.ShowDialog();
    }
    catch (Exception ex)
    {
    }
}
public frmIncomeAddList( )
{
    InitializeComponent();  

    FillCurrency();

    FillDropdown();
    FillEarnCode();
    FillEarnCodeDESC();

    this.earningBindingSource.AddNew();

    this.earningBindingNavigatorSaveItem.Enabled = true;

    FillDropdown(); 
}
这是对话框表单代码

private void bindingNavigatorAddNewItem_Click_1(object sender, EventArgs e)
{
    try
    {
        this.Validate();
        _earning = (Earning)this.earningBindingSource.Current;
        string EmpNo = Convert.ToString(_earning.Empno == null || _earning.Empno == string.Empty ? "0" : _earning.Empno);
        Incomes.frmIncomeAddList _earnEmployee = new Incomes.frmIncomeAddList();
        _earnEmployee.ShowDialog();
    }
    catch (Exception ex)
    {
    }
}
public frmIncomeAddList( )
{
    InitializeComponent();  

    FillCurrency();

    FillDropdown();
    FillEarnCode();
    FillEarnCodeDESC();

    this.earningBindingSource.AddNew();

    this.earningBindingNavigatorSaveItem.Enabled = true;

    FillDropdown(); 
}
在对话框窗体
this.earningBindingSource.AddNew()上我收到异常
无法将项目添加到只读或固定大小列表。

你能帮帮我吗。提前感谢

尝试以下方法:

List<Earning> earnings = ((IEnumerable<Earning>)earningBindingSource.DataSource).ToList();
earnings.Add(new Earning());
earningBindingSource.DataSource = earnings.AsEnumerable();
列出收益=((IEnumerable)earningBindingSource.DataSource).ToList();
收入。添加(新收入());
earningBindingSource.DataSource=收益.AsEnumerable();
尝试以下方法:

List<Earning> earnings = ((IEnumerable<Earning>)earningBindingSource.DataSource).ToList();
earnings.Add(new Earning());
earningBindingSource.DataSource = earnings.AsEnumerable();
列出收益=((IEnumerable)earningBindingSource.DataSource).ToList();
收入。添加(新收入());
earningBindingSource.DataSource=收益.AsEnumerable();

当父表没有记录时,在子表中添加新行,然后显示此错误


当父表没有记录时,
项不能添加到只读或固定大小的列表中,并在子表中添加新行,然后显示此错误


项不能添加到只读或固定大小列表中

请确保
YourBindingSource.AllowNew=true

或从BindingSource的“属性”窗口:


它对我很有效。

确保
YourBindingSource.AllowNew=true

或从BindingSource的“属性”窗口:


它对我有用。

很明显,您的BindingSource绑定到固定大小或只读列表。您应该更改基础数据源以使其可编辑或可变。但我正在执行
此操作。earningBindingSource.AddNew()
我在这里为
.AddNew()
做的工作是,我假设您的earningBindingSource是BindingSource的类型,AddNew()将向基础数据源添加新行。@KingKing那么您的建议是什么?更改基础数据源,如果您将其声明为只读,则无论如何都无法更改。我不知道您的数据源是什么,所以最好更新您的问题,以帮助其他人了解您的数据源是什么。我通常将数据源创建为DataTable。你的呢?很明显,你的BindingSource绑定到固定大小或只读列表。您应该更改基础数据源以使其可编辑或可变。但我正在执行
此操作。earningBindingSource.AddNew()
我在这里为
.AddNew()
做的工作是,我假设您的earningBindingSource是BindingSource的类型,AddNew()将向基础数据源添加新行。@KingKing那么您的建议是什么?更改基础数据源,如果您将其声明为只读,则无论如何都无法更改。我不知道您的数据源是什么,所以最好更新您的问题,以帮助其他人了解您的数据源是什么。我通常将数据源创建为DataTable。你的呢?