1
Answer

Populate TextBoxes From An AutoComplete TextBox

Chris

Chris

10y
752
1
I have a similar, but very different question to the one I posted yesterday, which was answered really well by Satyapriya Nayak. (http://www.c-sharpcorner.com/Forums/Thread/258270/populate-textboxes-from-a-dropdownlist.aspx)

I need to populate textboxes from the selection in an AutoCompleteExtender TextBox. I have partially managed to achieve this (the AutoComplete is working), but it is not filling the other TextBoxes.

Here is my code. I hope someone can help me again!

ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
   <div>
     <asp:TextBox runat="server" ID="Top_Site_NumTextBox" Size="6" AutoPostBack="true" OnSelectedIndexChanged="Top_Site_NumTextBox_SelectedIndexChanged" TextBox='<%# Bind("Top_Site_Num") %>' />
                        <asp:AutoCompleteExtender
                            runat="server"
                            BehaviorID="AutoCompleteEx"
                            ID="autoComplete1"
                            TargetControlID="Top_Site_NumTextBox"
                            ServicePath="WebService.asmx"
                            ServiceMethod="GetSiteNum"
                            MinimumPrefixLength="2"
                            CompletionInterval="1000"
                            EnableCaching="true"
                            CompletionSetCount="20"
                            DelimiterCharacters=";, :"
                            ShowOnlyCurrentWordInCompletionListItem="true" >
                            <Animations>
                                <OnShow>
                                    <Sequence>
                                        <%-- Make the completion list transparent and then show it --%>
                                        <OpacityAction Opacity="0" />
                                        <HideAction Visible="true" />
                                       
                                        <%--Cache the original size of the completion list the first time the animation is played and then set it to zero --%>
                                        <ScriptAction Script="
                                            // Cache the size and setup the initial size
                                            var behavior = $find('AutoCompleteEx');
                                            if (!behavior._height) {
                                            var target = behavior.get_completionList();
                                            behavior._height = target.offsetHeight - 2;
                                            target.style.height = '0px';
                                            }" />
                                       
                                        <%-- Expand from 0px to the appropriate size while fading in --%>
                                        <Parallel Duration=".4">
                                            <FadeIn />
                                            <Length PropertyKey="height" StartValue="0" EndValueScript="$find('AutoCompleteEx')._height" />
                                        </Parallel>
                                    </Sequence>
                                </OnShow>
                                <OnHide>
                                    <%-- Collapse down to 0px and fade out --%>
                                    <Parallel Duration=".4">
                                        <FadeOut />
                                        <Length PropertyKey="height" StartValueScript="$find('AutoCompleteEx')._height" EndValue="0" />
                                    </Parallel>
                                </OnHide>
                            </Animations>
                        </asp:AutoCompleteExtender>
      <asp:TextBox ID="Top_Site_NameTextBox" runat="server" Text='<%# Bind("Top_Site_Name") %>' Width="95%" />
      <asp:TextBox ID="Top_Site_AddressTextBox" runat="server" Height="4em" Text='<%# Bind("Top_Site_Address") %>' TextMode="MultiLine" Width="95%" />
      <asp:TextBox ID="Top_Site_CountyTextBox" runat="server" Text='<%# Bind("Top_Site_County") %>' />
      <asp:TextBox ID="Top_Site_PostcodeTextBox" runat="server" Text='<%# Bind("Top_Site_Postcode") %>' />
</div>
    </form>
</body>
</html>



ASPX.CS

using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Web.Services;

namespace Project_Review
{
    public partial class ProjectReviewAdd : System.Web.UI.Page
    {
        string strConnString = ConfigurationManager.ConnectionStrings["Tesseract"].ConnectionString;
        string str;
        SqlCommand com;

        protected void Page_Load(object sender, EventArgs e)
        {
            TextBox Top_Site_NumTextBox = FormViewAdd.FindControl("Top_Site_NumTextBox") as TextBox;

            Top_Site_NumTextBox.AutoPostBack = true;
            SqlConnection con = new SqlConnection(strConnString);

            if (!IsPostBack)
            {
                con.Open();
                str = "select Site_Num, Site_Name, Site_Address, Site_County, Site_Post_Code from SCSite";
                com = new SqlCommand(str, con);
                SqlDataReader reader = com.ExecuteReader();
                while (reader.Read())
                {
                    Top_Site_NumTextBox.ToString();
                }
                reader.Close();
                con.Close();
            }
        }

        private void clear()
        {
            TextBox Top_Site_NameTextBox = FormViewAdd.FindControl("Top_Site_NameTextBox") as TextBox;
            TextBox Top_Site_AddressTextBox = FormViewAdd.FindControl("Top_Site_AddressTextBox") as TextBox;
            TextBox Top_Site_CountyTextBox = FormViewAdd.FindControl("Top_Site_CountyTextBox") as TextBox;
            TextBox Top_Site_PostcodeTextBox = FormViewAdd.FindControl("Top_Site_PostcodeTextBox") as TextBox;

            Top_Site_NameTextBox.Text = "";
            Top_Site_AddressTextBox.Text = "";
            Top_Site_CountyTextBox.Text = "";
            Top_Site_PostcodeTextBox.Text = "";

        }

        protected void Top_Site_NumTextBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            TextBox Top_Site_NumTextBox = FormViewAdd.FindControl("Top_Site_NumTextBox") as TextBox;
            TextBox Top_Site_NameTextBox = FormViewAdd.FindControl("Top_Site_NameTextBox") as TextBox;
            TextBox Top_Site_AddressTextBox = FormViewAdd.FindControl("Top_Site_AddressTextBox") as TextBox;
            TextBox Top_Site_CountyTextBox = FormViewAdd.FindControl("Top_Site_CountyTextBox") as TextBox;
            TextBox Top_Site_PostcodeTextBox = FormViewAdd.FindControl("Top_Site_PostcodeTextBox") as TextBox;

            clear();
            SqlConnection con = new SqlConnection(strConnString);
            con.Open();
            str = "select Site_Num, Site_Name, Site_Address, Site_County, Site_Post_Code from SCSite where Site_Num='" + Top_Site_NumTextBox.Text + "'";
            com = new SqlCommand(str, con);
            SqlDataReader reader = com.ExecuteReader();
            while (reader.Read())
            {
                Top_Site_NameTextBox.Text = reader["Site_Name"].ToString();
                Top_Site_AddressTextBox.Text = reader["Site_Address"].ToString();
                Top_Site_CountyTextBox.Text = reader["Site_County"].ToString();
                Top_Site_PostcodeTextBox.Text = reader["Site_Post_Code"].ToString();

            }
            reader.Close();
            con.Close();
        }
    }
}


WEBSERVICE.ASMX

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;

namespace ProjectReview.ProjectReview
{
    /// <summary>
    /// Summary description for WebService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
    [System.Web.Script.Services.ScriptService]
    public class WebService : System.Web.Services.WebService
    {
        public WebService()
        {
            //Uncomment the following line if using designed components
            //InitializeComponent();
        }
        [WebMethod]
        public List<string> GetSiteNum(string prefixText, int count)
        {
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Tesseract"].ToString());
            con.Open();
            SqlCommand cmd = new SqlCommand("select Site_Num, Site_Name from SCSite where Site_Num like @Site_Num+'%' ORDER BY Site_Num", con);
            cmd.Parameters.AddWithValue("@Site_Num", prefixText);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            List<string> Site_Num = new List<string>();
            List<string> Site_Name = new List<string>();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                Site_Num.Add(dt.Rows[i][0].ToString());
                Site_Name.Add(dt.Rows[i][0].ToString());
            }
            return Site_Num;
        }
    }
}

Answers (1)