2014-09-03 2 views
0

각 페이지에는 고유 한 DDL이있는 여러 양식이 있습니다. 각 DDL마다 다른 데이터 소스가 필요하기 때문에 여러 가지 형식이 있습니다. 제출 단추를 누르면 "ddlCategory"컨트롤을 찾을 수 없다는 오류가 발생합니다. 그것은 다른 formview 컨트롤에 있기 때문에 그것이 있다고 가정합니다. 여기에 마크 업입니다다른 formview 컨트롤 안에있는 다른 컨트롤에 액세스 할 수 있습니까?

protected void AddRec(object sender, EventArgs e) 
{ 
    DropDownList ddlCategory = (DropDownList)FormView1.FindControl("ddlCategory"); 
    DropDownList ddlOrg = (DropDownList)FormView2.FindControl("ddlOrg"); 
    DropDownList ddlAtty = (DropDownList)FormView3.FindControl("ddlAtty"); 

    string constr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\webvideos.mdb;"; 
    string cmdstr = "INSERT INTO [Org_Sec_Atty] ([OrgID], [SecID], [AttyID]) VALUES (?, ?, ?)"; 


    OleDbConnection con = new OleDbConnection(constr); 
    OleDbCommand com = new OleDbCommand(cmdstr, con); 

    con.Open(); 
    com.Parameters.AddWithValue("@OrgID", ddlCategory.SelectedValue); 
    com.Parameters.AddWithValue("@SecID", ddlOrg.SelectedValue); 
    com.Parameters.AddWithValue("@AttyID", ddlAtty.SelectedValue); 
    com.ExecuteNonQuery(); 
    con.Close(); 
    Response.Redirect("ManageProfAffs.aspx"); 
} 

다시 말하지만, 그것은 제어 ddlCategory를 찾을 수 없습니다 알려줍니다 : 여기

<asp:FormView ID="FormView1" runat="server" DataKeyNames="ID" 
DataSourceID="AccessDataSource1" DefaultMode="Insert" > 
<InsertItemTemplate>  
    Select a Category:<br /> 
    <asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="True" 
     DataSourceID="AccessDataSource1" DataTextField="ORG_NAME" 
     DataValueField="ID"> 
    </asp:DropDownList> 
</InsertItemTemplate> 
</asp:FormView> 
<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
DataFile="~/App_Data/webvideos.mdb" 
SelectCommand="SELECT * FROM [ORGANIZATIONS]"/> 
<br /> 
<asp:FormView ID="FormView2" runat="server" DataKeyNames="ID" 
DataSourceID="AccessDataSource2" DefaultMode="Insert" > 
<InsertItemTemplate> 
    Select an Organization:<br /> 
    <asp:DropDownList ID="ddlOrg" runat="server" 
     DataSourceID="AccessDataSource2" DataTextField="SectionName" 
     DataValueField="ID"> 
    </asp:DropDownList> 
</InsertItemTemplate> 
</asp:FormView>  
<asp:AccessDataSource ID="AccessDataSource2" runat="server" 
DataFile="~/App_Data/webvideos.mdb" 
SelectCommand="SELECT ID,SectionName FROM ORG_SECTIONS WHERE [email protected] "> 
<SelectParameters> 
    <asp:ControlParameter ControlID="ddlCategory" 
     PropertyName="SelectedValue" 
     Name="ID" Type="String" 
     DefaultValue="" /> 
</SelectParameters> 
</asp:AccessDataSource> 
<br /> 
<asp:FormView ID="FormView3" runat="server" DataKeyNames="ID" 
DataSourceID="AccessDataSource3" DefaultMode="Insert" > 
<InsertItemTemplate> 
    Select an Attorney:<br /> 
    <asp:DropDownList ID="ddlAtty" runat="server" 
     DataSourceID="AccessDataSource3" DataTextField="Expr1" DataValueField="ATTY_ID"> 
    </asp:DropDownList> 
</InsertItemTemplate> 
</asp:FormView> 
<asp:AccessDataSource ID="AccessDataSource3" runat="server" 
DataFile="~/App_Data/webvideos.mdb" 
SelectCommand="SELECT ATTY_ID, NAME & ' ' & INITIAL & ' ' & LASTNAME AS Expr1 FROM ATTORNEYS ORDER BY NAME & INITIAL & ' ' & LASTNAME"> 
</asp:AccessDataSource> 

뒤에 코드입니다. 하나의 formview에 모든 것을 넣을 생각은했지만 각 드롭 다운 목록마다 다른 데이터 소스를 만드는 방법은 무엇입니까? 또한 모든 formview 컨트롤을 사용하지 않고 그냥 "이 [ID of the ddl]"사용하지만 null 참조 값을 준. 이 작품을 만드는 방법에 대한 아이디어가 있습니까?

+0

, 왜 다른 dropdownlists에 대해 서로 다른 데이터 소스를 사용할 수없는 이유는 무엇입니까? –

+0

DDL은 자체 데이터 소스가있는 formview 내부에 있습니다. 다른 데이터 소스를 계속 사용할 수 있습니까? 예를 들어, formview 컨트롤을 datasource1, 내 datasource2 내 DDL formview 안에 사용할 수 있습니까? – Joseph

답변

0

다음은 내가 한 일입니다. 모든 DDL을 하나의 formview 안에 두었습니다. (자체 데이터 소스가있는 formview 내에서 DDL에 대해 다른 데이터 소스를 지정할 수 있다는 것을 알지 못했습니다.) 그리고 이전 DDL의 값을 사용하는 속성을 사용하는 데이터 소스를 넣었습니다. 지금은 매력처럼 작동합니다.

<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
    DataFile="~/App_Data/webvideos.mdb" 
    SelectCommand="SELECT * FROM [ORGANIZATIONS]"/> 

<asp:AccessDataSource ID="AccessDataSource3" runat="server" 
    DataFile="~/App_Data/webvideos.mdb" 
    SelectCommand="SELECT ATTY_ID, NAME & ' ' & INITIAL & ' ' & LASTNAME AS Expr1 FROM ATTORNEYS ORDER BY NAME & INITIAL & ' ' & LASTNAME"> 
</asp:AccessDataSource> 
<br /> 
<asp:FormView ID="FormView1" runat="server" DataKeyNames="ID" 
    DataSourceID="AccessDataSource1" DefaultMode="Insert" > 
    <InsertItemTemplate>  
     Select a Category:<br /> 
     <asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="True" 
      DataSourceID="AccessDataSource1" DataTextField="ORG_NAME" 
      DataValueField="ID"> 
     </asp:DropDownList> 
    <br /> 
    <asp:AccessDataSource ID="AccessDataSource2" runat="server" 
     DataFile="~/App_Data/webvideos.mdb" 
     SelectCommand="SELECT ID,SectionName FROM ORG_SECTIONS WHERE [email protected] "> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="ddlCategory" 
       PropertyName="SelectedValue" 
       Name="ID" Type="String" 
       DefaultValue="" /> 
     </SelectParameters> 
    </asp:AccessDataSource> 
     Select an Organization:<br /> 
     <asp:DropDownList ID="ddlOrg" runat="server" 
      DataSourceID="AccessDataSource2" DataTextField="SectionName" 
      DataValueField="ID"> 
     </asp:DropDownList> 
<br /> 
     Select an Attorney:<br /> 
     <asp:DropDownList ID="ddlAtty" runat="server" 
      DataSourceID="AccessDataSource3" DataTextField="Expr1" DataValueField="ATTY_ID"> 
     </asp:DropDownList> 
    </InsertItemTemplate> 
</asp:FormView> 
<br /> 
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="AddRec" /> 

그리고 뒤에있는 코드 : 문제는 무엇

protected void AddRec(object sender, EventArgs e) 
{ 
    DropDownList ddlCategory = (DropDownList)FormView1.FindControl("ddlCategory"); 
    DropDownList ddlOrg = (DropDownList)FormView1.FindControl("ddlOrg"); 
    DropDownList ddlAtty = (DropDownList)FormView1.FindControl("ddlAtty"); 

    string constr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\webvideos.mdb;"; 
    string cmdstr = "INSERT INTO [Org_Sec_Atty] ([OrgID], [SecID], [Atty_ID]) VALUES (?, ?, ?)"; 


    OleDbConnection con = new OleDbConnection(constr); 
    OleDbCommand com = new OleDbCommand(cmdstr, con); 

    con.Open(); 
    com.Parameters.AddWithValue("@OrgID", ddlCategory.SelectedValue); 
    com.Parameters.AddWithValue("@SecID", ddlOrg.SelectedValue); 
    com.Parameters.AddWithValue("@AttyID", ddlAtty.SelectedValue); 
    com.ExecuteNonQuery(); 
    con.Close(); 
    Response.Redirect("ManageProfAffs.aspx"); 
} 
관련 문제