10

我有一个简单的 C# Windows 窗体应用程序,它应该显示一个 DataGridView。作为 DataBinding,我使用了一个对象(选择了一个名为 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.AllowAddtrue,但是,当我这样做时,我得到一个MissingMethodException说我的构造函数找不到。

4

3 回答 3

14

您的 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 提供了一些有时可能需要的额外功能。


如果由于某种原因您绝对不能添加无参数构造函数,那么您可以处理绑定源的添加新事件并调用 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);
}
于 2012-07-09T14:58:37.210 回答
4

您需要添加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();
    }
}
于 2012-07-09T11:37:25.993 回答
1

我最近发现,如果你使用你实现自己的绑定列表,IBindingList你必须true在你SupportsChangeNotification的除了AllowNew.

但是,MSDN文章DataGridView.AllowUserToAddRows仅指定了以下注释:

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

于 2017-02-22T22:20:24.300 回答