Domanda

I've searched, but no luck...

I have a textbox inside an accordion control, that's inside a datalist... I want to allow the accordion form to submit some values, but I can't get those values out of the textbox, and findcontrol isn't working.

<asp:DataList ID="AddProjectDataList" runat="server">
<ItemTemplate>

 <asp:HiddenField ID="clientid" runat="server" Value='<%# Eval("mmmclientlistid") %>'></asp:HiddenField>
  <asp:Table ID="ProjectTableClass" runat="server" style="width:600px;height:600px"><asp:TableRow><asp:TableCell VerticalAlign="Top">
<b>New <asp:Label ID="ProjectTypeLabel" Text='<%# Eval("ProjectTypeName") %>' runat="server"></asp:Label> Project</b>
      <table class="AddProject" cellpadding="5">
          <tr>
              <td valign="top">
                  <b>Campaign</b> information:
              </td>
              <td>


                  <asp:DropDownList ID="DDCampaignList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="OnChange_selectCampaign" AppendDataBoundItems="True" >
                      <asp:ListItem Text="SELECT A CAMPAIGN:" Value="-1"></asp:ListItem>
                  </asp:DropDownList>
                  <br />



                  <ajaxToolkit:Accordion
ID="CampaignAccordion"
runat="Server"
SelectedIndex="1"
HeaderCssClass="accordionHeader"
HeaderSelectedCssClass="accordionHeaderSelected"
ContentCssClass="accordionContent"
AutoSize="None"
FadeTransitions="true"
TransitionDuration="250"
FramesPerSecond="40"
RequireOpenedPane="false"
SuppressHeaderPostbacks="true">
<Panes>
    <ajaxToolkit:AccordionPane ID="AccordionPane1" runat="server"
        HeaderCssClass="accordionHeader"
        HeaderSelectedCssClass="accordionHeaderSelected"
        ContentCssClass="accordionContent">
        <Header> 
            <asp:LinkButton ID="AddCampaignLink" runat="server">Or Click to Add New Campaign</asp:LinkButton> </Header>
        <Content> 
                             <asp:TextBox ID="campaignNameTextBox" Style="width: 400px" runat="server"></asp:TextBox><br />
                  Description (optional):<br />
                  <asp:TextBox ID="campaignDescriptionTextBox" runat="server" TextMode="MultiLine"
                      Columns="30" Rows="3"></asp:TextBox>
            <br />
            <asp:Button ID="AddCampaignButton" runat="server" Text="Add New Campaign" OnClick="AddCampaign_Click" />
        </Content>
    </ajaxToolkit:AccordionPane>        
</Panes>            
<HeaderTemplate>...</HeaderTemplate>
<ContentTemplate>...</ContentTemplate>

And then in the codebehind

protected void AddCampaign_Click(object sender, EventArgs e)
    {
        //click to add campaign
        //campaignname
        //clientid



            HiddenField EID = (HiddenField)FindControl("HiddenFieldEID");
            TextBox campaignNameTextBox = (TextBox)AddProjectDataList.Items[0].FindControl("campaignNameTextBox");
            TextBox campaignDescriptionTextBox = (TextBox)AddProjectDataList.Items[0].FindControl("campaignDescriptionTextBox");

            tbl_campaign newcampaign = new tbl_campaign();
            newcampaign.clientID = Convert.ToInt32(DDClientList.SelectedValue); 
            newcampaign.employeeID = Convert.ToInt32(HiddenFieldEID.Value);
            newcampaign.campaignName = campaignNameTextBox.Text;
            newcampaign.campaignDescription = campaignDescriptionTextBox.Text;


            db.AddTotbl_campaign(newcampaign);

            db.SaveChanges();
    }

If I get rid of the accordion pane, it works fine. The control is located no problem. But with the accordion, no such luck. (The "hiddenFieldEID" field is located just fine because it's outside of the accordion.)

Do I need a separate onItemDataBound event in the DataList control? If so, what goes in there, and how do I relate it to the buttonclick event?

Thanks!

È stato utile?

Soluzione

Well, I might have just figured it out.

I did this:

                Control CampaignAccordion = (Control)AddProjectDataList.Items[0].FindControl("CampaignAccordion");
            TextBox campaignNameTextBox = (TextBox)CampaignAccordion.FindControl("campaignNameTextBox");
            TextBox campaignDescriptionTextBox = (TextBox)CampaignAccordion.FindControl("campaignDescriptionTextBox");

And it worked. No separate databinding event. Is this the normal way to do it?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top