2017-12-04 14 views
0

私は動的なグリッドビュー内にドロップダウンを持っています。私がしたいのは、最初の行のドロップダウンから最初の値を選択し、その1番目の行の選択値を使用して2番目の行のドロップダウンをバインドした後です。GridView内のドロップダウンの次の行をバインドするためのドロップダウンの選択値

         <asp:TemplateField HeaderText="Staff"> 
             <ItemTemplate> 
              <asp:DropDownList ID="ddlInsentiveCategory" runat="server" OnSelectedIndexChanged="ddlInsentiveCategory_SelectedIndexChanged" AutoPostBack="true" DataSourceID="InsentiveDataSource" 
               DataTextField="Name" DataValueField="SalesStaffID"> 
              </asp:DropDownList> 
              <asp:RequiredFieldValidator ID="RequiredFieldValidator70" runat="server" ControlToValidate="ddlInsentiveCategory" 
               CssClass="rfv" ErrorMessage="*" ForeColor="Red" InitialValue="0" ValidationGroup="group2"></asp:RequiredFieldValidator> 
              <asp:SqlDataSource ID="InsentiveDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:Connection %>" 
               SelectCommand="SELECT '--Select--' as [Name],'0' as [SalesStaffID] union all SELECT [Name],[SalesStaffID] FROM [SalesStaff] WHERE ([StaffCategoryID] = @StaffCategoryID)"> 
               <SelectParameters> 
                <asp:ControlParameter ControlID="hdnInsentiveCategoryID" Name="StaffCategoryID" PropertyName="Value" 
                 Type="Int32" /> 
               </SelectParameters> 
              </asp:SqlDataSource> 
              <asp:HiddenField ID="hdnInsentiveCategoryID" runat="server" Value='<%# Bind("StaffCategoryID") %>' /> 
             </ItemTemplate> 
            </asp:TemplateField> 

これを達成するために手伝ってください。前もって感謝します。

答えて

0

私はSelectedIndexChangedイベントを使用してこの問題を解決することができました。コードは以下の通りです。これが役立つことを願っています。

 protected void ddlInsentiveCategory_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     DropDownList ddlMainCategory = (DropDownList)gvInsentivePayment.Rows[0].FindControl("ddlInsentiveCategory"); 
     DropDownList ddlDependentCategory = (DropDownList)gvInsentivePayment.Rows[1].FindControl("ddlInsentiveCategory"); 

     if (ddlDependentCategory.SelectedIndex == 0) 
     { 

      ddlMainCategoryValue = Convert.ToInt32(ddlMainCategory.SelectedValue); 


      List<SalesStaff> FetchDependentList = // Bind the list using selected value from the 1st dropdown in the first row. 


      ddlDependentCategory.DataSourceID = null; //Assigning null to remove the DatasourceID in client side. 
      ddlDependentCategory.DataSource = FetchDependentList; 
      ddlDependentCategory.DataTextField = "Name"; 
      ddlDependentCategory.DataValueField = "ID"; 
      ddlDependentCategory.DataBind(); 
     } 

    } 
+0

あなたのコードに潜在的な障害点があります。行1が存在しない場合、例外がスローされます。 – Sunil

+0

@ Sunil私の場合、常に2つの行があります。 –

0

私はあなたのgridviewもSqlDataSourceを使用していると仮定しています。そうでなければ、前述のアプローチで必要な小さな変更があります。

  • あなたは、以下のマークアップのようにリスト をドロップダウンするためにSqlDataSourceコントロールにSelectingイベントを追加する必要があります。

    <asp:SqlDataSource ID="InsentiveDataSource" runat="server" 
          OnSelecting="InsentiveDataSource_Selecting" .... 
    
  • コードには、次のC#コードを追加します。ドロップダウンのSqlDataSourceのSelectingイベントは、データを取得する直前にSqlDataSourceに変更を加えることができるため、サブスクライブされています。ここで

    • 、あなたは、そのインデックスドロップダウンの選択された値が だけで変更された取得され、その後、次の行には、コントロールをドロップダウンばかり。次の行のドロップダウンコントロールが得られると

    • 、我々は単に ソース

    • を、そのデータの選択イベントを発生し、選択イベントで、我々は、動的パラメータ値を設定することができ、その DataBindメソッドを呼び出します前の行の選択した値をドロップします。

      private int dropdpownValue; 
      
      protected void ddlInsentiveCategory_SelectedIndexChanged (object sender, EventArgs e) 
      { 
      
      //get selected value of drop down and then find 
      //the row index of this drop down control 
      
      DropDownList ddl = sender as DropDownList; 
      int.TryParse((sender as DropDownList).SelectedItem.Value, out ddlValue); 
      GridViewRow row = (GridViewRow) ddl.NamingContainer; 
      int ddlRowIndex = row.RowIndex; 
      
      //find the next row dropdownlist and if there is a next row, 
      //then get this control and databind it 
      
      GridView gridView = (GridView)ddl.NamingContainer.NamingContainer ; 
      if((ddlRowIndex + 1) <= (gridView.Rows.Count -1)) { 
          DropDownList nextRowDDL = ((System.Web.UI.WebControls.GridView)ddl.NamingContainer.NamingContainer).Rows[ ddlRowIndex + 1].FindControl("ddlInsentiveCategory") 
          nextRowDDL.DataBind(); 
          } 
      } 
      
      protected void InsentiveDataSource_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
      { 
          if(dropdpownValue> 0) { 
            e.Command.Parameters[0].Value= dropdpownValue; 
            dropdownValue = 0; 
          } 
      } 
      
+0

本当にありがとうございます。私は私の答えで投稿したようにこれを解決することができました。 –

関連する問題