开发者

Capture DropDownList Index Change event inside of grid View

开发者 https://www.devze.com 2023-02-17 19:37 出处:网络
I am trying to capture the SelectedIndexChanged event for a drop down list I have put inside of a gridview control.It posts back fine, but does not go into my SelectedIndexChanged event handler.Here i

I am trying to capture the SelectedIndexChanged event for a drop down list I have put inside of a gridview control. It posts back fine, but does not go into my SelectedIndexChanged event handler. Here is my code

    DropDownList myddl;
    protected void Page_Load(object sender, EventArgs e)
    {
        this.myGridview.RowDataBound += new GridViewRowEventHandler(myGridview_RowDataBound);
        myddl = new DropDownList();
        myddl.SelectedIndexChanged += new EventHandler(myddl_SelectedIndexChanged);
        if (!Page.IsPostBack)
        {
            List<Team> teams = giveMeTeams();
            this.myGridview.DataSource = teams;
            this.myGridview.AutoGenerateColumns = false;

            BoundField col1 = new BoundField();
            col1.DataField = "Name";
            this.myGridview.Columns.Add(col1);

            BoundField col2 = new BoundField();
            col2.DataField = "Sport";
            this.myGridview.Columns.Add(col2);

            BoundField col3 = new BoundField();
            col3.DataField = "Status";
            this.myGridview.Columns.Add(col3);

            this.myGridview.DataBind();
        }
    }

    void myGridview_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        myddl = new DropDownList();
        myddl.SelectedIndexChanged += new EventHandler(myddl_SelectedIndexChanged);
        List<string> items = new List<string>();
        items.Add("good");
        items.Add("bad");
        myddl.DataSource = items;
        myddl.AutoPostBack = true;
        myddl.DataBind();
        e.Row.Cells[2].Controls.Add(myddl);
    }

    void myddl_SelectedIndexChanged(object sender, EventArgs e)
    {
        string temp = "In Here";  //neve hits this code
    }

    private List<Team> giveMeTeams()
    {
        Teams teams = new Teams();
        teams.Add(new Team("RedWings", "Hockey", "good"));
        teams.Add(new Team("Lions", "Football", "bad"));
        teams.Add(new Team("Packers", "Football", "good"));
        return teams;
    }

Any help is greatly appreciated. Thanks,

Edited based on Comments

I have tried as you suggested...and am still not capturing the post back. here is my new code

        void开发者_运维知识库 myGridview_RowCreated(object sender, GridViewRowEventArgs e)
    {
        DropDownList myddl = new DropDownList();
        myddl = new DropDownList();
        myddl.SelectedIndexChanged += new EventHandler(myddl_SelectedIndexChanged);
        myddl.ID = "MyID" + e.Row.RowIndex.ToString();
        e.Row.Cells[2].Controls.Add(myddl);
    }

    void myGridview_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        DropDownList myddl = e.Row.FindControl("MyID" + e.Row.RowIndex.ToString()) as DropDownList;
        //myddl.SelectedIndexChanged += new EventHandler(myddl_SelectedIndexChanged);
        List<string> items = new List<string>();
        items.Add("good");
        items.Add("bad");
        myddl.DataSource = items;
        myddl.DataMember = "Status";
        myddl.AutoPostBack = true;
        myddl.DataBind();
        e.Row.Cells[2].Controls.Add(myddl);
    }

it is still not going into my myddl_SelectedIndexChanged() eventhandler.


Create that Dropdownlist in RowCreated of the Grid and assign an ID to it. Get the refrence to these Dropdowns in RowDataBound via e.Row.FindControl("MyDropdownlistID") and bound them to the Datasource. Create distinct Dropdownlist instances instead of referencing always the same

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号