2014-09-03 3 views
0

У меня есть несколько форм, каждый со своим собственным DDL, который я использую внутри страницы. Я имею их в разных формах, потому что мне нужны разные источники данных для каждого DDL. Когда я нажимаю кнопку «Отправить», это дает мне ошибку, что он не может найти элемент управления «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> 

Вот код позади:

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. Я думал о том, чтобы поместить их в один вид, но как я могу использовать разные источники данных для каждого из раскрывающихся списков? Я также попробовал, не имея каких-либо FormView управления на всех, и только с помощью «это. [Идентификатор DDL]», но это дало мне нулевое значение задания. Любые идеи о том, как сделать эту работу?

+0

чем проблема, почему вы не можете использовать различные источники данных для различных DropDownLists? –

+0

DDL будут находиться внутри формы, которая имеет собственный источник данных. Смогу ли я использовать разные источники данных? Например, элемент управления formview имеет datasource1, могу ли я использовать datasource2 для моего DDL внутри формы? – Joseph

ответ

0

Вот как я это сделал. Я закончил тем, что поставил все DDL внутри одного вида формы (я не понимал, что могу указать разные источники данных для 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"); 
} 
Смежные вопросы