![](/img/trans.png)
[英]How to add a new row to the datagridview and edit it in C# winform?
[英]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.