Click here to Skip to main content
15,892,005 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
here, in my win project ,have button "update Subject" in data grid view (dgv) in form

and add event on clicked at this button open a popup win to update Subject (content Field)
here, problem is when i clicked button, multiple win is opened .

and also when i clicked btndelete multiple row are delete

how can i solve it



C#
private void Subjectseup()
       {
           gvsubjectsetup.DataSource = null;
           try
           {
               string querystring = "SELECT * FROM dbo.Subjects";
               DataTable datatable = Class1.Datatablebind(querystring);
               if (datatable.Rows.Count > 0)
               {
                   gvsubjectsetup.AutoGenerateColumns = false;

                   //Set Columns Count
                   gvsubjectsetup.ColumnCount = 8;

                   //Add Columns
                   gvsubjectsetup.Columns[0].Name = "Subjectid";
                   gvsubjectsetup.Columns[0].HeaderText = "Subject Id";
                   gvsubjectsetup.Columns[0].DataPropertyName = "Subject_id";

                   gvsubjectsetup.Columns[1].HeaderText = "Subject Name";
                   gvsubjectsetup.Columns[1].Name = "Subject";
                   gvsubjectsetup.Columns[1].DataPropertyName = "Subject Name";

                   gvsubjectsetup.Columns[2].HeaderText = "Allow Class";
                   gvsubjectsetup.Columns[2].Name = "AllowClass";
                   gvsubjectsetup.Columns[2].DataPropertyName = "Allow Class";

                   gvsubjectsetup.Columns[3].Name = "SubjectType";
                   gvsubjectsetup.Columns[3].HeaderText = "Subject Type";
                   gvsubjectsetup.Columns[3].DataPropertyName = "Subject Type";

                   gvsubjectsetup.Columns[4].HeaderText = "Subject Valuation";
                   gvsubjectsetup.Columns[4].DataPropertyName = "Subject valuation";

                   gvsubjectsetup.Columns[5].HeaderText = "Create Date";
                   gvsubjectsetup.Columns[5].DataPropertyName = "Create date";

                   gvsubjectsetup.Columns[6].HeaderText = "Category";
                   gvsubjectsetup.Columns[6].DataPropertyName = "category";

                   // add a button column.
                   DataGridViewButtonColumn updatebutton = new DataGridViewButtonColumn();

                   DataGridViewButtonColumn deletbutton = new DataGridViewButtonColumn();

                   updatebutton.HeaderText = "Update Classes";
                   updatebutton.Text = "Update";
                   updatebutton.Name = "btnUpdate";

                   deletbutton.HeaderText = "Delete Classes";
                   deletbutton.Text = "Delete";
                   deletbutton.Name = "btnDelete";

                   updatebutton.UseColumnTextForButtonValue = true;
                   deletbutton.UseColumnTextForButtonValue = true;
                   // addsectionbutton.UseColumnTextForButtonValue = true;

                   gvsubjectsetup.Columns.Add(updatebutton);
                   //  gvsubjectsetup.Columns.Add(addsectionbutton);
                   gvsubjectsetup.Columns.Add(deletbutton);

                   // ADD click event on button

                   gvsubjectsetup.CellClick += new DataGridViewCellEventHandler(gvsubjectsetup_click);
                   // gvsubjectsetup.DataSource = datatable;
                   gvsubjectsetup.DataSource = new BindingSource(datatable, null);
               }
               else
               {
                   return;
               }
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
       }





//here i handle event





C#
public void gvsubjectsetup_click(object sender, DataGridViewCellEventArgs e)
       {
           try
           {
               Int32 id = 0;

              if (gvsubjectsetup.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)


              {
                   if ((e.RowIndex > 0) || (e.ColumnIndex == gvsubjectsetup.Columns["btnUpdate"].Index) || (e.ColumnIndex == gvsubjectsetup.Columns["btnDelete"].Index))
                   {
                       if (e.ColumnIndex == gvsubjectsetup.Columns["btnUpdate"].Index)

                       {
                           id = (Int32)gvsubjectsetup[0, e.RowIndex].Value;
                           string s = "update subject";

                           Subjectpopwindows popwin = new Subjectpopwindows(s, id);
                           popwin.Show();

                       }
                       else if (e.ColumnIndex == gvsubjectsetup.Columns["btnDelete"].Index)
                       {
                           int subneme = (Int32)gvsubjectsetup[0, e.RowIndex].Value;

                           {
                               DialogResult result = MessageBox.Show("Do You Want to delete Class " + subneme + "?", "Delete", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                               if (result.Equals(DialogResult.OK))
                               {
                                   string delete = "  DELETE FROM dbo.Subjects WHERE Subject_id='" + subneme + "'";
                                   Class1.insertrecord(delete);
                                   MessageBox.Show("Delete Successfully !");
                                   Subjectseup();
                                   return;
                               }
                               else
                               {
                                   return;
                               }
                           }
                       }
                       else
                           return;
                   }
                   else
                   {
                       return;
                   }

               }
               else
               {
                   return;
               }
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
               return;
           }
       }
Posted

1 solution

Sounds like the event handler is subscribed several times to the CellClick event.
Make sure that
C#
gvsubjectsetup.CellClick += new DataGridViewCellEventHandler(gvsubjectsetup_click);
is executed exactly once during the initialization of your application. Set a breakpoint on that line, start the application and check how often the event subscription is executed.
Play around with your app a little to see if Subjectseup() is executed after init phase.

If that does not shed light on the problem:
For a test, comment out all code in gvsubjectsetup_click(), replace it with
C#
Console.WriteLine("Event handler executed");
, run the application and have a look at the output window (Menu -> View -> Output, or Ctrl+W, O) to see whether the CellClick event fires on button down and button up?

[Edit]
Make sure the event handler subscription is called exactly once.

I do not fully understand the Subjectseup() method. But if it works, let's change as little as possible. That is, you have to remove
C#
gvsubjectsetup.CellClick += new DataGridViewCellEventHandler(gvsubjectsetup_click);
from there. It belongs in a method that is executed once. One way to do it is the designer.
Open your form in designer view, select the DataGridView, open its properties. At the top, there is a choice to change properties or events.

The events button is decorated with a lightning symbol. Click it. Then scroll down the event list to where the left column says CellClick. If the right column already says gvsubjectsetup_click, everything is fine. If not, open the dropdown next to CellClick and select gvsubjectsetup_click from there.

The Visual Studio Designer will now put the event subscription code in InitializeComponent(), which is executed once during your application's init phase.

Good luck.
[/Edit]
 
Share this answer
 
v2
Comments
mukesh mourya 29-Apr-14 7:32am    
sir its execute event no. of rows
lukeer 29-Apr-14 7:38am    
The Subjectseup() method is executed once for each row in the DataGridView?
mukesh mourya 29-Apr-14 7:40am    
ya sr about my code is describe .... please help me
lukeer 29-Apr-14 9:30am    
I updated my solution.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900