Asp.net 捕获网格视图内的DropDownList索引更改事件

Asp.net 捕获网格视图内的DropDownList索引更改事件,asp.net,gridview,Asp.net,Gridview,我正在尝试捕获SelectedIndexChanged事件,该事件是我放在gridview控件中的下拉列表。它可以正常发回,但不会进入SelectedIndexChanged事件处理程序。这是我的密码 DropDownList myddl; protected void Page_Load(object sender, EventArgs e) { this.myGridview.RowDataBound += new GridViewRowEventHa

我正在尝试捕获SelectedIndexChanged事件,该事件是我放在gridview控件中的下拉列表。它可以正常发回,但不会进入SelectedIndexChanged事件处理程序。这是我的密码

    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;
    }
dropdownlistmyddl;
受保护的无效页面加载(对象发送方、事件参数e)
{
this.myGridview.RowDataBound+=新的GridViewRowEventHandler(myGridview\u RowDataBound);
myddl=新的DropDownList();
myddl.SelectedIndexChanged+=新事件处理程序(myddl\u SelectedIndexChanged);
如果(!Page.IsPostBack)
{
列出团队=giveMeTeams();
this.myGridview.DataSource=团队;
this.myGridview.AutoGenerateColumns=false;
BoundField col1=新的BoundField();
col1.DataField=“Name”;
this.myGridview.Columns.Add(col1);
BoundField col2=新的BoundField();
col2.DataField=“运动”;
this.myGridview.Columns.Add(col2);
BoundField col3=新的BoundField();
col3.DataField=“状态”;
this.myGridview.Columns.Add(col3);
this.myGridview.DataBind();
}
}
void myGridview_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
myddl=新的DropDownList();
myddl.SelectedIndexChanged+=新事件处理程序(myddl\u SelectedIndexChanged);
列表项=新列表();
项目。添加(“良好”);
项目。添加(“坏”);
myddl.DataSource=项目;
myddl.AutoPostBack=true;
myddl.DataBind();
e、 Row.Cells[2].Controls.Add(myddl);
}
void myddl\u SelectedIndexChanged(对象发送方,事件参数e)
{
string temp=“In Here”;//从未点击此代码
}
私人名单
{
团队=新团队();
添加(新球队(“红翼队”、“曲棍球队”、“好队”);
添加(新球队(“狮子”、“足球”、“坏”));
添加(新团队(“包装工”、“足球”、“好”);
返回队;
}
非常感谢您的帮助。 谢谢

根据评论编辑

我已经按照你的建议试过了…但是我仍然没有回复帖子。这是我的新代码

        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);
    }
void myGridview\u RowCreated(对象发送方,GridViewRowEventArgs e)
{
DropDownList myddl=新的DropDownList();
myddl=新的DropDownList();
myddl.SelectedIndexChanged+=新事件处理程序(myddl\u SelectedIndexChanged);
myddl.ID=“MyID”+e.Row.RowIndex.ToString();
e、 Row.Cells[2].Controls.Add(myddl);
}
void myGridview_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
DropDownList myddl=e.Row.FindControl(“MyID”+e.Row.RowIndex.ToString())作为DropDownList;
//myddl.SelectedIndexChanged+=新事件处理程序(myddl\u SelectedIndexChanged);
列表项=新列表();
项目。添加(“良好”);
项目。添加(“坏”);
myddl.DataSource=项目;
myddl.DataMember=“状态”;
myddl.AutoPostBack=true;
myddl.DataBind();
e、 Row.Cells[2].Controls.Add(myddl);
}

它仍然没有进入我的myddl\u SelectedIndexChanged()事件处理程序。

在网格中创建的行中创建Dropdownlist,并为其分配一个ID。通过
e.Row.FindControl(“MyDropdownlistID”)
获取对RowDataBound中这些下拉列表的引用,并将它们绑定到数据源。创建不同的Dropdownlist实例,而不是始终引用相同的

我用新代码更新了原始问题。仍然不起作用。你知道我遗漏了什么吗?@mikemurf22:你不必把RowIndex附加到DDL的ID上,它只能是GridViewRow(它们的命名容器)的唯一inide。ASP.Net自动生成唯一的ID,您可以通过
FindControl(“MyID”)
在RowDataBound中找到它们。但主要的问题是,您要在RowDataBound中再次添加它们。它们将在创建的行中的每次回发时重新创建。删除行
e.Row.Cells[2].Controls.Add(myddl)。如果(e.Row.RowType==DataControlRowType.DataRow){}
使代码正常工作,则还必须将代码嵌套在
的RowCreated和RowDatabound中。我还在把数据绑定()包装在文件夹中!Page.PostBack。这将阻止事件在回发上注册。一旦我明白了这一点,事情就开始发生了。谢谢你的邀请help@mikemurf22-我面临着一个与你类似的问题。你可以发布你的工作代码吗。