Windows窗体 - 向数据绑定数据添加新行

时间:2013-02-06 12:04:54

标签: c# winforms datagridview visual-studio-2012

我有一个Windows Form与dgv。目前它仅用于表示目的,因此我使用虚拟数据用数据填充一行。我还有一个名为Add New Row的按钮,每次点击时都需要在dataGridView中添加新的空行。对于dgv的初始填充,我使用如下形式的load事件:

private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.AutoGenerateColumns = false;

    MyData td13 = new MyData();

    td13.colorCombinationColumn = "aff";

    td13.remarksColumn = "abcdddd";

    td13.prodColumn = true;

    td13.LastModifiedColumn = "ab";

    td13.ByColumn = "abc";

    MyData[] arr = new MyData[2];
    arr[0] = td13;

    dataGridView1.DataSource = arr;

}

这个类MyData的位置:

public class MyData
{
    private int mId;

    private string mCombination;

    private string mremarks;

    private bool mprod;

    private string mLastModified;

    private string mBefore;


    public int Id
    {
        get
        {
            return mId;
        }

        set
        {
            ...

到目前为止一直很好,但随后我添加了我的按钮并处理了他的click事件:

private void btnAddRow_Click(object sender, EventArgs e)
{
    SoleData[] arr = new SoleData[1];
    dataGridView1.DataSource = arr;
}

这就是出错的地方。如果我只是dataGridView1.Rows.Add(1);Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.。如你所见,我尝试了其他一些方法,但到目前为止还没有成功。

1 个答案:

答案 0 :(得分:2)

尝试使用BindingList<MyData>代替MyData[] arr。 您对列表所做的任何修改都将反映在DGV中,无需进一步的代码。 (另外,将列表声明为表单的私有字段。)