我的应用程序中有一个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,从而创建了一个绑定源),我创建了一个方法来显示对象,如下按钮按下:
private void displayObjBtn_Click(object sender, EventArgs e)
{
showObjects();
}
private void showObjects()
{
objectStorageBindingSource.DataSource = null;
objectStorageBindingSource.DataSource = objectStorage.objArray;
}
这完全没问题,但显然不包括对行数的限制,由于数据绑定问题我无法做到这一点。
答案 0 :(得分:0)
<强>买者强>
从长远来看,这不是你应该采取的方法,但我认为这是一个实用的答案,因为这个问题对你的方法非常具体,缺乏一些周围的细节(这最终将意味着问题将是闭)。
它还假设“虚拟模式”操作不是您所追求的(根据链接的重复问题,它提供了答案)。
请在回答的其余部分前面考虑上述内容。
<小时/> 限制来源的行
除了我们在评论中的讨论,并且没有看到代码目前的样子,我会建议一些简单明了的事情。
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”。