C# - DataGridView无法添加行?

时间:2012-07-09 11:19:04

标签: c# datagridview

我有一个简单的C#Windows窗体应用程序,它应该显示一个DataGridView。作为DataBinding,我使用了一个Object(选择了一个名为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,表示无法找到我的构造函数。

3 个答案:

答案 0 :(得分:12)

你的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;
    }
}

然后绑定这样的东西:

BindingList<Car> carList = new BindingList<Car>();

dataGridView1.DataSource = carList;

您也可以使用BindingSource,但不必使用BindingSource,但BindingSource提供了一些有时可能需要的额外功能。


如果由于某种原因你绝对无法添加无参数构造函数,那么你可以处理绑定源的添加新事件并调用Car参数化构造函数:

设置绑定:

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

答案 1 :(得分:2)

您需要添加AddingNew事件处理程序:

public partial class Form1 : Form
{
    private BindingSource carBindingSource = new BindingSource();



    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        dataGridView1.DataSource = carBindingSource;

        this.carBindingSource.AddingNew +=
        new AddingNewEventHandler(carBindingSource_AddingNew);

        carBindingSource.AllowNew = true;



    }

    void carBindingSource_AddingNew(object sender, AddingNewEventArgs e)
    {
        e.NewObject = new Car();
    }
}

答案 2 :(得分:1)

我最近发现,如果您使用IBindingList实现自己的绑定列表,除了true之外,您必须在SupportsChangeNotification中返回AllowNew

DataGridView.AllowUserToAddRows的{​​{3}}文章仅指定以下注释:

  

如果DataGridView绑定到数据,则如果此属性和数据源的IBindingList.AllowNew属性都设置为true,则允许用户添加行。