Click here to Skip to main content
15,887,267 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
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
C#
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)
C#
protected void GVDropDownSelectIndexChanged(object sender, EventArgs e)
{
    //MyStuff
}


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

C#
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
Updated 31-Jan-13 2:45am
v6
Comments
Gerenatian 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 30-Jan-13 9:36am    
yes i m checking. and getting another dropdownlist

1 solution

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);
 
Share this answer
 
Comments
Wasim1989 1-Feb-13 1:33am    
Thanx
Wasim1989 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)



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