2016-11-03 12 views
0

私は、詳細ビューには2つのドロップダウンリストがあり、1つはCollegeと呼ばれ、もう1つはDepartmentです。ユーザーが大学を選択した場合、部門ドロップダウンリストには、選択した大学のすべての部門が生成されます。詳細ビューの他のドロップダウンリストに基づくドロップダウンリストの変更ASP.NET

コントロールを見つけることができませんでした「DetailsView1:

<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:UEDConnectionStringMarwaMarwa %>" SelectCommand="SELECT [ArName], [Code] FROM [College]"></asp:SqlDataSource> 

<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:UEDConnectionStringMarwaMarwa %>" SelectCommand="SELECT [Code], [ArName] FROM [Department] WHERE ([CollegeCode] = @CollegeCode)"> 
       <SelectParameters> 
        <asp:ControlParameter ControlID="DetailsView1$DropDownList2" Name="CollegeCode" PropertyName="SelectedValue" Type="Int32" /> 
       </SelectParameters> 
</asp:SqlDataSource> 

これはエラーメッセージです:ここで

<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="600px" AutoGenerateRows="False" CssClass="table table-bordered mtop" DataKeyNames="ID" DataSourceID="SqlDataSource1" OnDataBound="DetailsView1_DataBound"> 
       <FieldHeaderStyle CssClass="DetailsViewHeader" Width="200px" /> 
       <Fields> 

        <asp:TemplateField HeaderText="College" SortExpression="Colleges"> 
         <EditItemTemplate> 
          <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource3" DataTextField="ArName" DataValueField="Code"></asp:DropDownList> 
          <asp:HiddenField ID="HiddenColl" runat="server" value='<%# Eval("Colleges") %>' /> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label15" runat="server" Text='<%# Bind("Colleges") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 

        <asp:TemplateField HeaderText="Department" SortExpression="ArName"> 
         <EditItemTemplate> 
          <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" DataTextField="ArName" DataValueField="Code"></asp:DropDownList> 
          <asp:HiddenField ID="HiddenDep" runat="server" value='<%# Eval("ArName") %>' />      
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label11" runat="server" Text='<%# Bind("ArName") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 

        <asp:TemplateField ShowHeader="False"> 
         <EditItemTemplate> 
          <asp:Button ID="Button1" runat="server" CausesValidation="True" CommandName="Update" Text="Update" /> 
          &nbsp;<asp:Button ID="Button2" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" /> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Button ID="Button1" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit" /> 
          &nbsp;<asp:Button ID="btnDelete" runat="server" CausesValidation="False" Text="Delete" OnClientClick="return confirm('Do you want to delete ?');" OnClick="btnDelete_Click" /> 
         </ItemTemplate> 
         <ControlStyle CssClass="btn-login" /> 
         <ItemStyle CssClass="text-center" /> 
        </asp:TemplateField> 

      </Fields> 
     </asp:DetailsView> 

SqlDataSourcesである:ここでは

はたDetailsViewとドロップダウンリストがあります$ DropDownList2 'in ControlParameter' CollegeCode '

私はこれDetailsView1$DropDownList2はので、それはたDetailsView

問題は何であるの内側にあるドロップダウンリストにアクセスすることができたのですか?

+0

最初のドロップダウンリストでAutopostbackをtrueに設定すると、編集項目テンプレート内にsqlデータソースがある必要があるかもしれません。 – Nikki9696

+0

これは、テンプレートコントロールのドロップダウンリストをカスケード表示するクリーンな例です。http://stackoverflow.com/questions/6749944/implement-cascading-dropdownlist-templates-in-a-templated-control – Nikki9696

答えて

0

私はDetailsViewに慣れていて、SqlDataSourceは経験していませんが、私は手伝っていきます。

私の経験上、私はあなたがコントロールのClientIDを引き受けることを試みるべきではないことを学んだ。したがって、最初にサーバコントロールからClientIDを取得することをお勧めします。インライン式がIntroduction to ASP.NET inline expressions in the .NET Frameworkを参照してくださいasp.netについての詳細は

​​

:インライン式を使用 、私はこのような何かをしようとするだろう。

DetailsViewコントロールには慣れていないので、DetailsViewのインデックス0に行があるかどうかわかりません(例外をスローする)。

そのコードが動作しない場合、私はDetailsView1行が(例えばDetailsView1DataBoundイベントメソッド内など)が結合された後に実行されるバックエンドでControlIDを設定し、動的にお勧めします。私はこれが役に立てば幸い

if (DetailsView1.Rows.Count > 0) { 
    Control objDropDownList2 = DetailsView1.Rows(0).FindControl("DropDownList2"); 
    if (objDropDownList2 != null) { 
     SqlDataSource1.SelectParameters("CollegeCode").ControlID = objDropDownList2.ClientID; 
    } 
} 

VB:

If DetailsView1.Rows.Count > 0 Then 
    Dim objDropDownList2 as Control = DetailsView1.Rows(0).FindControl("DropDownList2") 
    If objDropDownList2 IsNot Nothing Then 
     SqlDataSource1.SelectParameters("CollegeCode").ControlID = objDropDownList2.ClientID 
    End If 
End If 

のC#!

+0

ありがとうございましたが、動作しませんでした – Marwa

関連する問題