10

DataGridViewを表示する単純なC#Windowsフォームアプリケーションがあります。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.AllowAddすることを提案しましたtrue、しかし、私がそれをするとき、私MissingMethodExceptionは私のコンストラクターが見つからなかったと言うaを受け取ります。

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 に答える