Goran Bibic Ответов: 1

Динамическая кнопка create insert into SQL function?


Мне нужно вставить в команду для динамической кнопки...они автоматически создаются из элемента datagrid

Что я уже пробовал:

private void Form1_Load(object sender, EventArgs e)  
       {  
           // TODO: This line of code loads data into the 'bssDataSet.roba_usluge' table. You can move, or remove it, as needed.  
           this.roba_uslugeTableAdapter.Fill(this.bssDataSet.roba_usluge);  
  
  
  
           SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=bss;Integrated Security=True");  
           //SqlCommand cmd = new SqlCommand("SELECT Concat(ime),data FROM roba_usluge", con);  
          // SqlCommand cmd = new SqlCommand("SELECT (redni_broj),data FROM roba_usluge", con);  
           SqlCommand cmd = new SqlCommand("SELECT (ime), data FROM roba_usluge", con);  
          // SqlCommand cmd = new SqlCommand("SELECT Concat(ime, cijena_sa_porezom),data FROM roba_usluge", con);  
  
           // Getting all the data to ItemTable        
           var da = new SqlDataAdapter(cmd);  
           var ItemTable = new DataTable();  
           da.Fill(ItemTable);  
  
           con.Open();  
           Int32 count = ItemTable.Rows.Count;  
           con.Close();  
  
           int top = 50;  
           int left = 50;  
           for (int i = 1; i <= count; i++)  
           // for (int i = 0; i < count; i++)      
           {  
               Button button = new Button();  
               button.Size = new Size(128,128);  
               button.BackColor = Color.Transparent;  
               //button.FlatStyle = FlatStyle.Flat;  
               button.FlatAppearance.BorderSize = 0;  
               button.Font = new System.Drawing.Font("Trebuchet MS", 10);  
               button.TextAlign = ContentAlignment.TopCenter;  
               button.BackgroundImageLayout = ImageLayout.Zoom;  
                 
               button.Left = left;  
               button.Top = top;  
               button.Text = ItemTable.Rows[i - 1][0].ToString();  
               //if (ItemTable.Rows[i - 1][1] != null && ItemTable.Rows[i - 1][1] != "")  
                   if (ItemTable.Rows[i - 1][1] != null)  
                   {  
                   try  
                   {  
                       byte[] _byte = (byte[])ItemTable.Rows[i - 1][1];  
                       MemoryStream ms = new MemoryStream(_byte);  
                       button.BackgroundImage = System.Drawing.Image.FromStream(ms);//bilo image  
                   }  
                   catch { }  
               }  
               // button.Text = ItemTable.Rows[i][0].ToString();      
               this.Controls.Add(button);  
               if (i % 5 == 0)  
               {  
                   left = 50;  
                   top += button.Height + 2;  
               }  
               else  
               {  
                   left += button.Width + 2;  
               }  
               // top += button.Height + 2;      
  
  
           }  
       }  

1 Ответов

Рейтинг:
6

Wendelius

Вы уже создаете кнопку в своем коде. Поэтому, когда вы создаете кнопку, просто прикрепите к ней обработчик событий. Вы можете использовать один и тот же eventhandler для всех кнопок.

Что-то вроде

...
Button button = new Button();  
button.Size = new Size(128,128);  
button.BackColor = Color.Transparent;  
button.Click += new System.EventHandler(dynamicbutton_Click);
...

и тогда в том же классе у вас будет обработчик событий
void dynamicbutton_Click(object sender, EventArgs e) {
  // do something
}

Если вам нужно, вы можете добавить некоторую идентификацию к свойству тега, чтобы отличать кнопки друг от друга после нажатия на них. Видеть Контроль.Свойство Тега (System.Окна.Формы)[^]