2012-01-19 2 views
2

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

Скриншот: enter image description here

Описание для скриншота:

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

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

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

+0

Какую часть сценария вам нужна? Просто добавление в сетку? Кроме того, как вы загружаете свои данные в DataGridView? Вы обязательны? –

+0

Да, я привязываю ... Часть, где я нажимаю панель категорий и где должны отображаться продукты для этой категории. –

+0

Что вы планируете отображать на панели «Продукты»? Может ли это быть списком или сеткой? –

ответ

2

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

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

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); 

    } 
} 

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