C#Winform DataGridView内联添加新行

时间:2011-08-17 11:55:55

标签: c# winforms datagridview add

我想在我的datagridview中添加一个新项目。我知道可以使用几个TextBoxes和一个Button来实现这一点。当用户单击此按钮时,它将向数据库中添加一个新项目并刷新我的datagridview。

我想知道我是否可以使用datagridview的最后一行添加新项目。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您是否使用了RAD-Databind(winforms上的DataSource)?如果是这样可能有点棘手。 您应该在单独的图层中加载数据(如果可以帮助,则不在代码隐藏中)。那么在本地数据中添加另一行应该相当简单。

正如您所问:这是一个非常简单的示例。 我使用相同的通用数据:

public struct SimpleData
{
    public int Id { get; set; }
    public string Text { get; set; }
}

通过以下命令初始化名为GridView的DataGridView:

        var bindingSource = new BindingSource();
        bindingSource.Add(new SimpleData {Id = 1, Text = "Hello"});
        bindingSource.Add(new SimpleData {Id = 2, Text = "World"});
        GridView.DataSource = bindingSource;

然后你可以简单地通过

添加另一行
        var data = GridView.DataSource as BindingSource;
        data.Add(new SimpleData{Id=3, Text="!!! added"});

在现实世界的例子中,我会使用一些众所周知的模式: MVVM for WinformsMVP for Winforms 从逻辑中分离视图。但是,如果你选择使用像List或类似的浅/简单datacontainer,那么重要的一点就是使用某种Bindingsource(告知Grid数据已经改变)或者将更改的数据重新分配给DataSource。

答案 1 :(得分:0)

或者,

您可以将DataGridView绑定到WrapperObject的Generic.List(或任何您想要调用的类),其中WrapperObject的每个实例可以代表数据库中已有的记录之一并公开其属性,或者表示'空白记录'。

在DataGridView的EditingControlShowing事件处理程序中,您可以确定用户是否在最后一行上键入(因为它是包含空白部分的唯一行)并执行任何操作以将部件添加到数据库中。

如果要更新DataGridView上的内容,只需从要显示的记录中重新创建一个新的WrapperObjects列表,然后添加一个表示最后的空白记录,这样它就会显示在在底部,然后将DataGridView的数据源设置为新列表。