在datagrid中某列插入dropdownlist,dropdownlist数据列表根据相关字段不同绑定不同的数据信息。请问当我点击每一行的dropdownlist时,怎么根据所选择项跳转到相应的操作界面?

解决方案 »

  1.   

    你可以在这个dropdownlist添加一个SelectedIndexChanged事件处理函数,在其中,你可以把sender对象转换成DropDownList对象,通过它的Parent.Parent,得到当前的DataGridRow对象
      

  2.   

    我建议在放个Button 然后在去找你点击行的dropdownlist  然后在去根据 dropdownlist的值进行操作
      

  3.   

    那Button有什么作用呢?将触发那些事件
      

  4.   

    问题是在datagrid中怎么出发dropdownlist的SelectedIndexChanged事件。有具体代码吗?期待大家的帮忙
      

  5.   

    <asp:DropDownList OnSelectedIndexChanged="..." Autopostback="true" ..../>或在datagrid的ItemCreated事件里加,参考
    http://codebetter.com/blogs/eric.wise/archive/2005/07/18/129344.aspx
     Private Sub dgrAddresses_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgrAddresses.ItemCreated
            If e.Item.ItemType = ListItemType.EditItem Then
                AddHandler CType(e.Item.FindControl("ddlState"), DropDownList).SelectedIndexChanged, AddressOf state_selectedIndexChanged
            End If        If e.Item.ItemType = ListItemType.Footer Then
                AddHandler CType(e.Item.FindControl("ddlAddState"), DropDownList).SelectedIndexChanged, AddressOf addState_selectedIndexChanged
            End If
        End Sub
      

  6.   

    基本思路就是 saucer(思归) 说的,这里同时提供 GridView/DataGrid 中使用 CheckBox/DropDownList 的版本
    ASP.NET DEMO 14: 如何在 GridView/DataGrid 模板列中使用自动回发的 CheckBox/DropDownList
    http://www.cnblogs.com/Jinglecat/archive/2007/07/29/835817.html
    // code snippets C# style
    // .aspx
    <asp:TemplateColumn>
                        <ItemTemplate>                        
                            <asp:DropDownList ID="drpItem" runat="server" OnSelectedIndexChanged="drpItem2_SelectedIndexChanged" AutoPostBack="true">
                                <asp:ListItem></asp:ListItem>
                                <asp:ListItem Value="red">red</asp:ListItem>
                                <asp:ListItem Value="green">green</asp:ListItem>
                                <asp:ListItem Value="orange">orange</asp:ListItem>
                        </asp:DropDownList>
                        </ItemTemplate>
                    </asp:TemplateColumn>// .aspx.cs
    protected void drpItem2_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList drp = sender as DropDownList; // 触发事件的 DropDownList
            DataGridItem row = drp.NamingContainer as DataGridItem; 
    //        row.Style.Add(HtmlTextWriterStyle.BackgroundColor, drp.SelectedValue);
    //        Response.Write(String.Format("选中第 {0} 行", row.ItemIndex + 1));
            // more codes
            // Label lbl = row.FindControl("MyLabelID") as Label;
            // string str = row.Cells[0].Text;
            // ...
           Response.Redirect("target.aspx");
        }
      

  7.   

    那要怎么获取选择的DropDownList的值呢?
      

  8.   

    那要怎么获取选择的DropDownList的值呢?==========OMG , 得手把手的教 ...>>protected void drpItem2_SelectedIndexChanged(object sender, EventArgs e)
    {
    DropDownList drp = sender as DropDownList; // 触发事件的 DropDownList
    string selectedValue = drp.SelectedValue; // !!!!!
    // ....
    DataGridItem row = drp.NamingContainer as DataGridItem;
      

  9.   

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
    DropDownList drp = (DropDownList)sender;
    if(drp != null) 
    {
    string val=drp.SelectedValue.Trim().ToString(); 
    this.Label4.Text=val;
    }
    }我测试了,发现系统根本就不触发DropDownList1_SelectedIndexChanged事件
      

  10.   

    <ItemTemplate>
    <asp:DropDownList id="DropDownList1" runat="server" Width="90%"  OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"
    AutoPostBack="true"></asp:DropDownList>
    </ItemTemplate>
      

  11.   

    为什么这样不能触发DropDownList1_SelectedIndexChanged事件
      

  12.   

    不能这样写事件
    要在DataBound 事件里写如private void DataGrid1_DataBound(object send..)
    {
      if(e.Item.ItemIndex >= 0)
      {
         DropDownList list = e.Item.FindControl("下拉框的ID") as DropDownList;
         if(list != null)
         {
             list.OnSelectedIndexChanged += SelectEven;
         } 
      }
    }private void SelectEven(object send,system..){
     //todo
    }
      

  13.   

    以前工作中也遇到过这样的操作,用javascript解决了,今天看了saucer(思归)的方法,试了一下可以,下面是代码.
    html
    <asp:TemplateField>
                        <HeaderStyle Width="100px" />
                        <ItemTemplate>
                            <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DDL_SelectedIndexChanged">
                                <asp:ListItem Text="baidu" Selected="true"></asp:ListItem>
                                <asp:ListItem Text="google"></asp:ListItem>
                                <asp:ListItem Text="yahoo"></asp:ListItem>
                            </asp:DropDownList>
                        </ItemTemplate>
                    </asp:TemplateField>
    后台代码:
    Protected Sub DDL_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim myddl As DropDownList = CType(sender, DropDownList)
            Dim myrow As GridViewRow = CType(myddl.Parent.Parent, GridViewRow)
            Response.Write("操作:" + myddl.SelectedItem.Text + "操作列:" + myrow.Cells(0).Text)
    End Sub
      

  14.   

    我也试过,但程序运行不触发DDL_SelectedIndexChanged事件,请问为什么?Protected Sub DDL_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim myddl As DropDownList = CType(sender, DropDownList)
            Dim myrow As GridViewRow = CType(myddl.Parent.Parent, GridViewRow)
            Response.Write("操作:" + myddl.SelectedItem.Text + "操作列:" + myrow.Cells(0).Text)
    End Sub