参数无效datagridview默认错误对话框

时间:2020-04-30 03:40:37

标签: c# winforms

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 个答案:

答案 0 :(得分:0)

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

选项1

向Item类对象添加[Browsable(false)]属性:
DataGridView不会为TimeStamp属性生成列。

注意:

标记有BrowsableAttribute构造函数的可浏览成员的成员 参数设置为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");