首页 > 解决方案 > 参数无效 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;
    }
}

标签: c#winforms

解决方案


这里有几个选项,看看哪个更适合。

选项 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");

推荐阅读