在GridView 中嵌套了DropDownList
而DropDownList是AutoPostBack的,在选择这个下拉框的时候,怎么样才能得到是这一行的下拉框发生了变化,变量得到下拉框选的值.

解决方案 »

  1.   

    DropDownList是AutoPostBack的,在选择这个下拉框的时候,怎么样才能得到是这一行的下拉框发生了变化
    ---------
    通过此下拉框的Parent属性可获得其父控件,也就是所属的GridviewRow。注意其类型是control,需要显式类型转换在同一行里还有一个隐藏字段
    ----
    获得了所在的GridviewRow,便可以用findcontrol方法根据控件ID获得其他子控件,返回类型是control,也要类型转换
      

  2.   

    foreach(GridViewRow row in GridView1.Rows)
    {
      if(row选中)
      {
        DropDownList ddl=(DropDownList)row.FindControl("DropDownList1");
        string value=ddl.SelectedValue;
     }
    }隐藏值也类似
      

  3.   

    那是通过什么事件来获得gridviewrow呢,是下拉框的DropDownList1_SelectedIndexChanged事件吗?
      

  4.   

    string str = ((DropDownList)e.Row.FindControl("DropDownList1")).SelectedItem.Text;//下拉的文本值
    string hfStr = ((HiddenField)e.Row.FindControl("HiddenField1")).Value;//隐藏的值
      

  5.   

    DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
      DropDownListcbx =    (DropDownList)sender ;
       //取得了 对应 GridViewRow 的方法:   ((GridViewRow)(cbx.Parent.Parent)); 
    }
      

  6.   

    DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 

      DropDownList ddl=    (DropDownList)sender ; 
       //取得了 对应 GridViewRow 的方法:   (GridViewRow)(ddl.Parent.Parent);  
    }
    ----------------------
    那是通过什么事件来获得gridviewrow呢,是下拉框的DropDownList1_SelectedIndexChanged事件吗? 
      

  7.   

    两个DropDownList在Repeater、DataList、DataGrid内的连动和冒泡事件(BubbleEvent)http://www.aspxboy.com/private/5311/default.aspx
      

  8.   

    DropDwonList没有向Button那样的事件冒泡功能
    必须自己实现该事件的冒泡
      

  9.   

    序列你可以根据gridview的行计算,应该是页数*页大小+本页中的ROW,之后再按上面几位仁兄的方法弄
      

  10.   

    protected void ddlTest_SelectedIndexChanged(object sender, EventArgs e)
            {
                DropDownList ddlTest = (DropDownList)sender;
                GridViewRow gvr =  (GridViewRow)ddlTest.Parent.Parent;
                Label Label2 = (Label)gvr.FindControl("Label2");
                txtAuthor.Text = Label2.Text;
            } <asp:TemplateField>
                            <ItemTemplate>
                                <asp:Label ID="Label2" runat="server"><%#Convert.ToDateTime(DataBinder.Eval(Container.DataItem, "CreatedDate")).ToString("yyyy-MM-dd")%></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:DropDownList ID="ddlTest" AutoPostBack="true" OnSelectedIndexChanged="ddlTest_SelectedIndexChanged"  runat="server">
                                </asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
    类似这种写法就可以了
      

  11.   

    如果是为得到dropDownList的值 可以在GridView的RowDataBound事件中给下拉框注册SelectedIndexChanged事件 再在此事件中做保存或其它的相关处理如下
        void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            DropDownList d = (DropDownList)e.Row.FindControl("DropDownList1");
            d.SelectedIndexChanged += new EventHandler(d_SelectedIndexChanged);        
        }    void d_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList d = (DropDownList)sender;
            string v= d.SelectedValue;
            //此处做相关处理
        }