[英]How to programmatically add a row to a datagridview when it is data-bound?
[英]Trying to set a maximum row count with a data-bound DataGridView
我的应用程序中有一个DataGridView,但是我想将其限制为仅20行,但是因为它是数据绑定的,所以我得到了InvalidOperationException
。 通过研究,我遇到了虚拟模式,但是对于像我这样的初学者来说,这似乎令人困惑。 此外,我已经看到有人说设置DGV.DataSource = null;
解决问题,但这对我不起作用。
我基本上单击一个按钮,然后在DataGridView中填充信息。 我唯一可以解决的问题是限制用户仅输入我的对象的20个实例。 然后,他们必须删除一个才能输入另一个。
有什么方法可以使用数据绑定的DataGridView设置最大行数限制?
编辑
在我单独的类文件(objectStorage.cs)中,我有这个
public class objectStorage: IComparable<objectStorage>
{
public string objID { get; set; }
public string objName { get; set; }
public string objDescription { get; set; }
public static List<objectStorage> objArray = new List<objectStorage>();
}
然后在我添加新对象(addObj.cs)的表单中,我有以下内容:
private void objCreationBtn_Click(object sender, EventArgs e)
{
objectStorage.objArray.Add(new objectStorage
{
objID = objIDValueTxt.Text,
objName = objNameRTB.Text,
objDescription = objDescRTB.Text,
});
}
然后在我的主窗体中,我有了DGV(在其中将数据源分配给GUI中的objectStorage,从而创建了绑定源),该DGV创建了一种显示对象的方法,例如按下按钮即可:
private void displayObjBtn_Click(object sender, EventArgs e)
{
showObjects();
}
private void showObjects()
{
objectStorageBindingSource.DataSource = null;
objectStorageBindingSource.DataSource = objectStorage.objArray;
}
这完全可以,但是显然行数没有限制,由于数据绑定问题,我不能这样做。
警告
从长远来看,这不是您应该采用的方法,但是鉴于问题完全针对您的方法并且缺少一些周围的细节(这最终意味着问题将被解决),因此我提供此作为实用的答案。
它还假设“虚拟模式”操作不是您要执行的操作(根据链接的重复问题,它提供了答案)。
请记住以上内容,作为答案的其余部分。
在我们的注释中进行进一步讨论之后,在不了解代码当前外观的情况下,我将建议一些简单的方法。
DataGridView
将位于Form
,它将具有一个代码隐藏文件。 在此文件中,我们要进行必要的修改以将列表限制为20个项目:
using System.Linq; using System.Collections.Generic; public class MyForm : Form { // Event handler for the Forms Load event public void MyForm_OnLoad(object sender, EventArgs e) { // Take 20 items from whatever source you are currently using in the DGV. List<MyDataBoundItem> items = objectStorage.Items.Take(20).ToList(); dataGridView1.DataSource = items; } }
绑定列表并不总是必需的,可以使用List<T>
但我认为它将是只读的,而BindingList<T>
支持添加和删除行。
还请记住删除设计者领导的解决方案,因为它们会互相干扰。
如果提供内存,则DataGridView
控件不提供强制最大行数的机制。 假设网格允许添加行,您将不得不处理用户尝试添加新行且最大数量的情况。 其他用户输入方案可能需要手动干预。
关于模式的简要说明
关于“视图模型”的简要说明,暂时不要理会。 它是从几个标准UI模式中借用的一个术语,用于将UI的处理分为可测试的块。 这是一个更高级的主题,当您经历了一些非模式的UI编码时,您应该继续阅读它:-)
为了将来的选择,请搜索“ MVC”,“ MVP”和“ MVVM”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.