Параметр не является допустимым. - PullRequest
0 голосов
/ 30 апреля 2020
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 голосов
/ 01 мая 2020

Вот пара вариантов, посмотрим, что лучше подходит.

Опция 1 :

Добавить атрибут [Browsable(false)] к объекту класса Item:
DataGridView не будет генерировать столбец для свойства TimeStamp.

Обратите внимание, что:

Элементы, отмеченные параметром browsable конструктора 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:

Обратите внимание, что вы не сможете изменить значение TimeStamp через DataGridView. Но, как уже упоминалось в комментариях, это свойство не нужно изменять.

var itemList = new BindingList<Item>(po.Items);
dataGridView1.DataSource = itemList;
dataGridView1.Columns.Remove("TimeStamp");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...