我有一个简单的C#Windows窗体应用程序,该应用程序应显示一个DataGridView。作为数据绑定(bind),我使用了一个对象(选择了一个名为Car的类),它的样子是这样的:

class Car
{
    public string color { get; set ; }
    public int maxspeed { get; set; }

    public Car (string color, int maxspeed) {
        this.color = color;
        this.maxspeed = maxspeed;
    }
}

但是,当我将DataGridView属性AllowUserToAddRows设置为true时,仍然很少*允许我添加行。

有人建议将carBindingSource.AllowAdd设置为true,但是,当我这样做时,我得到了一个MissingMethodException,它说找不到我的构造函数。

最佳答案

您的Car类需要具有无参数的构造函数,而数据源则需要像BindingList之类的东西

将Car类更改为此:

class Car
{
    public string color { get; set ; }
    public int maxspeed { get; set; }

    public Car() {
    }

    public Car (string color, int maxspeed) {
        this.color = color;
        this.maxspeed = maxspeed;
    }
}

然后绑定(bind)这样的东西:
BindingList<Car> carList = new BindingList<Car>();

dataGridView1.DataSource = carList;

您也可以为此使用BindingSource,但不必这样做,但是BindingSource提供了某些有时可能是必需的额外功能。

如果由于某种原因您绝对不能添加无参数的构造函数,则可以处理绑定(bind)源的添加新事件并调用Car参数化的构造函数:

设置绑定(bind):
BindingList<Car> carList = new BindingList<Car>();
BindingSource bs = new BindingSource();
bs.DataSource = carList;
bs.AddingNew +=
    new AddingNewEventHandler(bindingSource_AddingNew);

bs.AllowNew = true;
dataGridView1.DataSource = bs;

和处理程序代码:
void bindingSource_AddingNew(object sender, AddingNewEventArgs e)
{
    e.NewObject = new Car("",0);
}

关于C#-DataGridView无法添加行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11394012/

10-12 12:42
查看更多