繁体   English   中英

C# Winform DataGridView 内联添加新行

[英]C# Winform DataGridView inline add New row

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

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

您是否使用了 RAD-Databind(您的 Winform 上的 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"});

在一个真实的例子中,我会使用一些众所周知的模式:用于 Winforms 的MVVM用于 Winforms 的 MVP确实将视图与逻辑分开。 但毕竟重要的是使用某种 Bindingsource(通知 Grid 数据已更改)或如果您选择使用 List 或类似的浅/简单数据容器,则将更改的数据重新分配给 DataSource。

或者,

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM