4

DataGridViewボタンをクリックしたときに動的に行を追加する必要があります。私はそれについて多くの投稿を読みましたが、これらはすべてDataTableasを持っていDataSourceます。私の場合、DataSourceはaListで、行はカスタムオブジェクト(Product)です。次のコードを参照してください。

    List<Product> products = 
    (List<Product>)repository.Session.CreateCriteria<Product>().List<Product>();
    ProductsDataGrid.DataSource = products;

AllowUserToAddRow本当です。では、どうすれば動的に行を追加できますか?


私が理解しているように、Nasmi Sabeerの答えに基づいて、私は次のことを試みました。

    private void addProductBtn_Click(object sender, EventArgs e)
    {
        List<Product> products = (List<Product>) ProductsDataGrid.DataSource;
        products.Add(new Product());
        ProductsDataGrid.DataSource = products;
        ProductsDataGrid.Refresh();   
    }

しかし、動作しません。

4

3 に答える 3

5

BindingSource次のようにリストをラップすることができます。

BindingSource bs = new BindingSource();
bs.DataSource = products;

次にDataSource、グリッドのプロパティをに設定しますbs

ProductsDataGrid.DataSource = bs;

次に、クリックハンドラを次のように更新します

private void addProductBtn_Click(object sender, EventArgs e)
{
    ...
    bs.Add(new Product());
    ....
    ProductsDataGrid.Refresh();
}
于 2013-01-10T13:52:02.147 に答える
2

使用するBindingList

public partial class Form1 : Form
{
    private IBindingList blist;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //Binding
        this.blist = new BindingList<Product>();
        this.dataGridView1.DataSource = this.blist;

    }

    private void button2_Click(object sender, EventArgs e)
    {
        // Add
        this.blist.Add(new Product { Id = 2, Text = "Prodotto 2" });
    }
}

public class Product
{
    public int Id { get; set; }

    public string Text { get; set; }
}
于 2013-01-10T14:15:25.713 に答える
1

最初に製品をリストに追加してから、DataGridViewでRefreshを呼び出します

于 2013-01-10T13:31:51.373 に答える