C#Winform DataGridView内联添加新行

C#Winform DataGridView内联添加新行,c#,winforms,datagridview,add,C#,Winforms,Datagridview,Add,我想在datagridview中添加一个新项。我知道使用几个文本框和一个按钮可以实现这一点。当用户单击此按钮时,它将向数据库中添加一个新项并刷新我的datagridview 我想知道是否可以使用datagridview的最后一行添加新项。我该怎么做呢?您是否使用了RAD数据绑定(winforms上的数据源)?如果是这样,可能会有点棘手。 您应该在单独的层中加载数据(如果可以的话,不要在代码隐藏中加载)。然后,将另一行添加到本地数据中应该相当简单 正如你所问:这是一个非常简单的示例。 我使用相同的

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


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

您是否使用了RAD数据绑定(winforms上的数据源)?如果是这样,可能会有点棘手。 您应该在单独的层中加载数据(如果可以的话,不要在代码隐藏中加载)。然后,将另一行添加到本地数据中应该相当简单

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

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"});
在现实世界的例子中,我会使用一些众所周知的模式: 或 一定要把观点和逻辑分开。但毕竟重要的一点是使用某种绑定源(通知网格数据已更改),或者如果您选择使用浅层/简单的数据容器(如列表或类似),则将更改的数据重新分配给数据源。

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

在DATAGIDVIEW的EdgIngEngultDebug事件处理程序中,可以确定用户是否在最后一行上键入(因为它是包含空白部分的唯一行),并尽可能地将一部分添加到数据库中。


当您想更新DATAGIDVIEW上的内容时,只需从要显示的记录中重新创建一个新的ReabPipe对象列表,并添加一个来表示在末尾的空白记录,这样它将显示在底部,然后将DATAGIDVIEW的数据源设置为新的列表。

BTW:在我的代码中,逻辑“知道”。视图-正常情况下,你不需要它,所以只需将其作为演示阅读即可。在上面提到的MVVM模式中,您将在ViewModel中公开BindingSource,并且视图(可能在您的代码隐藏中)将绑定到此视图。感谢您的回复。我忘了告诉你我用的是3Layer。DAL(插入…更新…)。BAL,和视图。如何检索每一新行的值或更改行以将其与DAL连接起来?这变得更加具体于实现。在使用某种类型的存储库模式进行数据访问的系统中,您可以将所有数据(表)作为对象,并检查DAL中的更改—或者您可以查询数据行—在这种情况下,您所要做的就是在执行更新的ViewModel中添加对DAL的调用。或者ViewModel可能负责跟踪更改。这是一个具体情况的问题,你喜欢什么。