c# - 参数无效 datagridview 默认错误对话框
问题描述
BindingList<Item> itemList = new BindingList<Item>();
foreach (Item item in po.Items)
{
itemList.Add(item);
}
==> dgvItems.DataSource = itemList;
dgvItems.Columns["ItemId"].Visible = false;
当我运行我的程序时,它会在我用“==>”标记的行抛出错误,我不知道错误来自哪里,因为当我调试列表包含有效数据时。它以前工作过,所以我认为出现错误是因为我对时间戳存储库代码进行了一些更改。
这是我的 Item 对象定义:
public class Item
{
public byte[] TimeStamp { get; set; }
public int ItemId { get; set; }
[Required(ErrorMessage = "Item Name is required")]
public string Name { get; set; }
[Required(ErrorMessage = "Description is required")]
public string Description { get; set; }
[Required(ErrorMessage = "Price is required")]
public decimal Price { get; set; }
[Required(ErrorMessage = "Location is required")]
public string Location { get; set; }
//public byte[] TimeStamp { get; set; }
[Required(ErrorMessage = "Justification is required")]
public string Justification { get; set; }
[Required(ErrorMessage = "Quantity is required")]
public int Quantity { get; set; }
public int PurchaseOrderId { get; set; }
public DateTime Date { get; set; }
public ItemStatus Status { get; set; }
public Item()
{
}
public Item(int itemId, string name, string description, decimal price, string location, string justification, int quantity, int purchaseOrderId, DateTime date, ItemStatus status)
{
ItemId = itemId;
Name = name;
Description = description;
Price = price;
Location = location;
Justification = justification;
Quantity = quantity;
PurchaseOrderId = purchaseOrderId;
Date = date;
Status = status;
}
}
解决方案
这里有几个选项,看看哪个更适合。
选项 1:
[Browsable(false)]
向 Item 类对象添加属性:
DataGridView 不会为 TimeStamp 属性生成 Column。
需要注意的是:
标记为 BrowsableAttribute 构造函数的 browsable 参数设置为 false 的成员不适用于设计时编辑,因此不会显示在可视化设计器中。
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
public class Item
{
[Browsable(false)]
public byte[] TimeStamp { get; set; }
public int ItemId { get; set; }
[Required(ErrorMessage = "Item Name is required")]
public string Name { get; set; }
//[...]
}
选项 2:
设置后立即删除列DataGridView.DataSource
:
请注意,您将无法通过 DataGridView 修改 TimeStamp 值。但是,正如评论中提到的,这个属性不需要修改。
var itemList = new BindingList<Item>(po.Items);
dataGridView1.DataSource = itemList;
dataGridView1.Columns.Remove("TimeStamp");
推荐阅读
- python - 动画 Matplotlib 图
- angular - 在 Angulartics2 中跟踪事件
- php - 如何在 Symfony 5 中为与其他实体有关系的实体在 Symfony 方式中创建一个表单?
- javascript - React Hook useEffect 缺少依赖项:'fetchData'
- javascript - 用户单击锚链接时不触发 Javascript 滚动事件
- php - 如何将加载到数据库的图像路径的 php 代码嵌入到我的代码中?
- python - python 3中的非常慢的循环,tkinter
- elasticsearch - Elasticsearch 不返回所有文档进行查询
- kdb - 验证键控表是否具有唯一键
- ruby-on-rails - rails嵌套控制器测试缺少必需的键:[:foo_id]