Click here to Skip to main content
11,709,375 members (50,144 online)
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C# ASP.NET
I am adding dropdownlist to gridview by program. when i select drowdown item first time it working fine(Event fire only once) but in next time i select another dropdownlist item then my event(GVDropDownSelectIndexChanged) fire twice (n times according to previous selected dropdown). below is my code. can any body give me solution to this problem.
thanx in advanced.
My Code
public void PopulateGridViewDetails()
{
int row1 = 0;
            foreach (GridViewRow rows in GridView1.Rows)
            {
                for (int cCount = 0; cCount < dataTable.Columns.Count; cCount++)
                {
                    if (cCount < 3)
                    {
                        Label l = new Label();
                        l.ID = "gvlbl" + dataTable.Columns[cCount].ColumnName;
                        l.Text = dataTable.Rows[row1][cCount].ToString();
 
                        if (l.ID == "gvlblTarineeId")
                        {
                            l.Visible = true;
                        }
 
                        if (cCount == 0)
                        {
                            GridView1.HeaderRow.Cells[cCount].Visible = false;
                            rows.Cells[cCount].Visible = false;
                        }
 
                        rows.Cells[cCount].Controls.Add(l);
                    }
                    else
                    {
                        if (dataTable.Columns[cCount].ColumnName.ToLower().Contains("status"))
                        {
                            //adding dropdownlist to grid view 
                            DropDownList ddlStatus = new DropDownList();
                            ddlStatus.ID = "ddl" + dataTable.Columns[cCount].ColumnName + "_" + row1;
                            ddlStatus.DataSource = new StudentExamStatusDAO().GetExamStatusList();
                            ddlStatus.DataTextField = "Status";
                            ddlStatus.DataValueField = "Id";
                            ddlStatus.DataBind();
 
                            ddlStatus.Items.Add(new ListItem("--Select Status--", "0"));
                            ddlStatus.SelectedValue = "0";
                            //adding Event to DropdownList
                            ddlStatus.SelectedIndexChanged += new EventHandler(GVDropDownSelectIndexChanged); 
                            ddlStatus.AutoPostBack = true;
                            rows.Cells[cCount].Controls.Add(ddlStatus);
                            GridView1.HeaderRow.Cells[cCount].Text = "";
                        }
                        else
                        {
                            TextBox t = new TextBox();
                            t.ID = "gvtxt" + dataTable.Columns[cCount].ColumnName;
                            rows.Cells[cCount].Controls.Add(t);
 
                            Label lID = new Label();
                            lID.ID = "gvlbl" + dataTable.Columns[cCount].ColumnName + "Id";
                            lID.Text = dataTable.Rows[row1][cCount].ToString();
                            lID.Visible = false;
                            rows.Cells[cCount].Controls.Add(lID);
                        }
                    }
                }
 
                row1++;
            }
}

My Event which is fired n times (according to previous dropdownlist selection)
protected void GVDropDownSelectIndexChanged(object sender, EventArgs e)
{
    //MyStuff
}

Is there any sequencing problem.
i Load gridview Data from pageLoad event without checking IsPostback property

protected void Page_Load(object sender, EventArgs e)
    {
        try
        {            
            if (!IsPostBack)
            {
                //my stuff
            }
 
            PopulateGridViewDetails();            
        }
        catch (Exception)
        {
            throw;
        }
    }

and is there any other way to achieve this stuff (prevent other controls event)?
Posted 30-Jan-13 2:59am
Edited 31-Jan-13 2:45am
v6
Comments
Gerenatian at 30-Jan-13 9:32am
   
Are you looking at the sender values to see exactly what object is triggering the event?

DropDownList snd = (DropDownList)sender;
string Name = snd.Name;

This might help provide more insight to whats firing the event.
Wasim1989 at 30-Jan-13 9:36am
   
yes i m checking. and getting another dropdownlist

1 solution

Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

Every time the data is populated it registers the event. For safe end

Add unregister Event Handler.

//removing Event to DropdownList
ddlStatus.SelectedIndexChanged -= new EventHandler(GVDropDownSelectIndexChanged);
//adding Event to DropdownList
ddlStatus.SelectedIndexChanged += new EventHandler(GVDropDownSelectIndexChanged);
  Permalink  
Comments
Wasim1989 at 1-Feb-13 1:33am
   
Thanx
Wasim1989 at 1-Feb-13 2:12am
   
I tried your code but it doesnt work.

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

  Print Answers RSS
0 Sergey Alexandrovich Kryukov 580
1 OriginalGriff 250
2 Maciej Los 225
3 Peter Leow 219
4 Mika Wendelius 160
0 OriginalGriff 9,428
1 Sergey Alexandrovich Kryukov 9,027
2 CPallini 5,189
3 Maciej Los 4,991
4 Mika Wendelius 3,856


Advertise | Privacy | Mobile
Web02 | 2.8.150819.1 | Last Updated 31 Jan 2013
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100