Как обновить DataGridView в WinForms - PullRequest
2 голосов
/ 19 января 2012

Я должен обновить DataGridView с продуктами.Эти продукты сгруппированы по категориям.Для каждой категории я сделал Panel.При нажатии на Panel я хотел бы отобразить список Panel с, которые содержат продукты из нажатой Panel.Кроме того, когда я нажимаю Panel из списка, я бы хотел, чтобы он был вставлен в DataGridView.Возможен ли этот сценарий?

Снимок экрана: enter image description here

Описание для снимка экрана:

-Категории находятся в верхней левой части.

-Когда категория нажата, список записей базы данных отображается с левой стороны.

- Когда нажата запись, она связывается с сеткой данных.

1 Ответ

2 голосов
/ 19 января 2012

Я не понимаю, каким будет GUI. Скриншот поможет нам лучше. Не уверен, что нажатие на панель - это идеальный способ позволить пользователям что-то открыть. Панели Надежда имеют границы.

Предположим, что каждая панель имеет свой объект категории, помеченный для нее.

private void button1_Click(object sender, EventArgs e)
{
    List<Category> lstCategory = Manager.GetCategories();

    int i = 5, j = 5;
    foreach (Category cat in lstCategory)
    {
        Label label = new Label();
        label.Text = cat.Name;
        Panel panel = new Panel();
        panel.Tag = cat;
        panel.Controls.Add(label);
        //if you already have panel created for categories, then start from here..
        panel.Click += ((s, r) =>
        {
            List<Product> lstProduct = Manager.GetProducts((Category)panel.Tag);

            int x = 5, y = 5;
            foreach (Product product in lstProduct)
            {
                var pnl = new Panel();
                pnl.BorderStyle = BorderStyle.Fixed3D;
                pnl.Size = new Size(15, 15);
                pnl.Location = new Point(20 + x, 20 + y); //position it properly.
                this.Controls.Add(pnl);
                pnl.Tag = product;
                Label lbl = new Label();
                lbl.Text = product.Name;
                pnl.Controls.Add(lbl);
                pnl.Click += ((p, q) =>
                {
                   dataGridView1.Rows.Add(//according to pnl.Tag values

                });
            }
        });

        panel.BorderStyle = BorderStyle.FixedSingle;
        panel.Size = new Size(15, 15);
        panel.Location = new Point(20 + i, 20 + j); //position it properly.
        this.Controls.Add(panel);

    }
}

Вы можете выполнить рефакторинг кодов, которые создают панели, к одному методу, передавая необходимые вещи в качестве параметров, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...