C# - Make An Autocomplete TextBox?
Oct 4, 2010How do I make an autocomplete TextBox in C# that bind to a data source?
View 3 RepliesHow do I make an autocomplete TextBox in C# that bind to a data source?
View 3 RepliesI'm creating just simple autocomplete sample.
taking one textbox adding autocomplete extender as
<asp:ScriptManager ID="ScriptManager2" runat="server">
<Services>
<asp:ServiceReference Path="WebService.asmx" />
</Services>
</asp:ScriptManager>
<asp:TextBox ID="TextBox1" runat="server" EnableTheming="True" ></asp:TextBox>
<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" MinimumPrefixLength="1" ServiceMethod="GetCountryInfo" ServicePath="WebService.asmx" TargetControlID="TextBox1">
</cc1:AutoCompleteExtender>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
Also creating web services as "WebService.asmx" & code inside this file is that
<%@ WebService Language="C#" CodeBehind="~/App_Code/WebService.cs" %>
------
then in Webservice.cs file i write code as
public class WebService : System.Web.Services.WebService {
MySql.Data.MySqlClient.MySqlCommand cmd = new MySqlCommand();
MySql.Data.MySqlClient.MySqlConnection con = new MySqlConnection();
//MySqlDataAdapter da = new MySqlDataAdapter();
MySqlDataReader dr;
public WebService () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
public string[] GetCountryInfo(string prefixText)
{
int count = 10;
string sql = "Select * from tbl_patientmaster Where P_NAME like '" + @prefixText + "%'";
con.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["HMSDBConnectionString"].ToString();
con.Open();
MySql.Data.MySqlClient.MySqlDataAdapter da = new MySql.Data.MySqlClient.MySqlDataAdapter(sql, con);
da.SelectCommand.Parameters.Add("@prefixText", MySql.Data.MySqlClient.MySqlDbType.VarChar, 50).Value = prefixText + "%";
System.Data.DataTable dt = new System.Data.DataTable();
da.Fill(dt);
string[] items = new string[dt.Rows.Count];
int i = 0;
foreach (System.Data.DataRow dr in dt.Rows)
{
items.SetValue(dr["P_NAME"].ToString(), i);
i++;
}
return items;
}
this code is not working
I have a user control which encapsulates a NumericUpDownExtender. This UserControl implements the interface ICallbackEventHandler, because I want that when a user changes the value of the textbox associated a custom event to be raised in the server. By the other hand each time an async postback is done I shoe a message of loading and disable the whole screen. This works perfect when something is changed in for example an UpdatePanel through this lines of code:
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(
function (sender, args) {
var modalPopupBehavior = $find('programmaticSavingLoadingModalPopupBehavior');
modalPopupBehavior.show();
}
);
The UserControl is placed inside a detailsview which is inside an UpdatePanel in an aspx. When the custom event is raised I want another textbox in the aspx to change its value. So far, When I click on the UpDownExtender, it goes correctly to the server and raises the custom event, and the new value of the textbox is assigned in the server. but it is not changed in the browser.
I suspect that the problem is the callback, since I have the same architecture for a UserControl with an AutoCompleteExtender which implement IPostbackEventHandler and it works. Any clues how can I solve this here to make the UpDownNumericExtender user control to work like the AutComplete one? This is the code of the user control and the parent:
using System;
using System.Web.UI;
using System.ComponentModel;
using System.Text;
namespace Corp.UserControls
{
[Themeable(true)]
public partial class CustomNumericUpDown : CorpNumericUpDown, ICallbackEventHandler
{
protected void Page_PreRender(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
currentInstanceNumber = CorpAjaxControlToolkitUserControl.getNextInstanceNumber();
}
registerControl(this.HFNumericUpDown.ClientID, currentInstanceNumber);
string strCallServer = "NumericUpDownCallServer" + currentInstanceNumber.ToString();
// If this function is not written the callback to get the disponibilidadCliente doesn't work
if (!Page.ClientScript.IsClientScriptBlockRegistered("ReceiveServerDataNumericUpDown"))
{
StringBuilder str = new StringBuilder();
str.Append("function ReceiveServerDataNumericUpDown(arg, context) {}").AppendLine();
Page.ClientScript.RegisterClientScriptBlock(typeof(CorpNumericUpDown),
"ReceiveServerDataNumericUpDown", str.ToString(), true);
}
nudeNumericUpDownExtender.BehaviorID = "NumericUpDownEx" + currentInstanceNumber.ToString();
ClientScriptManager cm = Page.ClientScript;
String cbReference = cm.GetCallbackEventReference(this, "arg", "ReceiveServerDataNumericUpDown", "");
String callbackScript = "function " + strCallServer + "(arg, context)" + Environment.NewLine + "{" + Environment.NewLine + cbReference + ";" + Environment.NewLine + "}" + Environment.NewLine;
cm.RegisterClientScriptBlock(typeof(CustomNumericUpDown), strCallServer, callbackScript, true);
base.Page_PreRender(sender,e);
}
[System.ComponentModel.Browsable(true)]
[System.ComponentModel.Bindable(true)]
public Int64 Value
{
get { return (string.IsNullOrEmpty(HFNumericUpDown.Value) ? Int64.Parse("1") : Int64.Parse(HFNumericUpDown.Value)); }
set
{
HFNumericUpDown.Value = value.ToString();
//txtAutoCompleteCliente_AutoCompleteExtender.ContextKey = value.ToString();
// TODO: Change the text of the textbox
}
}
[System.ComponentModel.Browsable(true)]
[System.ComponentModel.Bindable(true)]
[Description("The text of the numeric up down")]
public string Text
{
get { return txtNumericUpDown.Text; }
set { txtNumericUpDown.Text = value; }
}
public delegate void NumericUpDownChangedHandler(object sender, NumericUpDownChangedArgs e);
public event NumericUpDownChangedHandler numericUpDownEvent;
[System.ComponentModel.Browsable(true)]
[System.ComponentModel.Bindable(true)]
[System.ComponentModel.Description("Raised after the number has been increased or decreased")]
protected virtual void OnNumericUpDownEvent(object sender, NumericUpDownChangedArgs e)
{
if (numericUpDownEvent != null) //check to see if anyone has attached to the event
numericUpDownEvent(this, e);
}
#region ICallbackEventHandler Members
public string GetCallbackResult()
{
return "";//throw new NotImplementedException();
}
public void RaiseCallbackEvent(string eventArgument)
{
NumericUpDownChangedArgs nudca = new NumericUpDownChangedArgs(long.Parse(eventArgument));
OnNumericUpDownEvent(this, nudca);
}
#endregion
}
/// <summary>
/// Class that adds the prestamoList to the event
/// </summary>
public class NumericUpDownChangedArgs : System.EventArgs
{
/// <summary>
/// The current selected value.
/// </summary>
public long Value { get; private set; }
public NumericUpDownChangedArgs(long value)
{
Value = value;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Corp
{
/// <summary>
/// Summary description for CorpAjaxControlToolkitUserControl
/// </summary>
public class CorpNumericUpDown : CorpAjaxControlToolkitUserControl
{
private Int16 _currentInstanceNumber; // This variable hold the instanceNumber assignated at first place.
public short currentInstanceNumber
get { return _currentInstanceNumber; }
set { _currentInstanceNumber = value; }
}
protected void Page_PreRender(object sender, EventArgs e)
{
const string strOnChange = "OnChange";
const string strCallServer = "NumericUpDownCallServer";
StringBuilder str = new StringBuilder();
foreach (KeyValuePair<String, Int16> control in controlsToRegister)
{
str.Append("function ").Append(strOnChange + control.Value).Append("(sender, eventArgs) ").AppendLine();
Append("{").AppendLine();
str.Append(" if (sender) {").AppendLine();
str.Append(" var hfield = document.getElementById('").Append(control.Key).Append("');").AppendLine();
str.Append(" if (hfield.value != eventArgs) {").AppendLine();
str.Append(" hfield.value = eventArgs;").AppendLine();
str.Append(" ").Append(strCallServer + control.Value).Append("(eventArgs, eventArgs);").AppendLine();
str.Append(" }").AppendLine();
str.Append(" }").AppendLine();
str.Append("}").AppendLine();
Page.ClientScript.RegisterClientScriptBlock(typeof(CorpNumericUpDown), Guid.NewGuid().ToString(), str.ToString(), true);
}
str = new StringBuilder();
foreach (KeyValuePair<String, Int16> control in controlsToRegister)
{
str.Append(" funcsPageLoad[funcsPageLoad.length] = function() { $find('NumericUpDownEx" + control.Value + "').add_currentChanged(").Append(strOnChange + control.Value).Append(");};").AppendLine();
str.Append(" funcsPageUnLoad[funcsPageUnLoad.length] = function() { $find('NumericUpDownEx" + control.Value + "').remove_currentChanged(").Append(strOnChange + control.Value).Append(");};").AppendLine();
}
Page.ClientScript.RegisterClientScriptBlock(typeof(CorpNumericUpDown), Guid.NewGuid().ToString(), str.ToString(), true);
}
}
}
and to create the loading view I use this: //The beginRequest event is raised before the processing of an asynchronous postback starts and the postback is sent to the server. You can use this event to call custom script to set a request header or to start an animation that notifies the user that the postback is being processed.
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(
function (sender, args) {
var modalPopupBehavior = $find('programmaticSavingLoadingModalPopupBehavior');
modalPopupBehavior.show();
}
);
//The endRequest event is raised after an asynchronous postback is finished and control has been returned to the browser. You can use this event to provide a notification to users or to log errors.
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
function (sender, arg) {
var modalPopupBehavior = $find('programmaticSavingLoadingModalPopupBehavior');
modalPopupBehavior.hide();
}
);
I have used ajaxtool kit's autocomplete on a page which gets data from a webservice. This autocomplete is slow, at the time I only have 10 to 20 records in table and it take about 3 to 5 seconds to search and show result in autocomplete. User have to wait about 4 second on average to see data.
View 1 RepliesI am looking at the book MVC in Action for how to do autocomplete on a textbox.The one variation is that I have to return a JSON object.
So my partial view looks like;
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SHP.WebUI.Models.HolidayRequestViewModel>" %>
I need to implement an auto complete feature and found posting on the Web that text box will do the job using ajax extender. Do I need to create a new website ASP.NET Ajax-Enabled or can I use my current ASP application? Or is there a better way to approach this using some other methods? [URL]
View 7 RepliesI have an auto complete extender applied to my textbox as follows:
[Code]....
In the web pages code behind I have the following method:
[Code]....
there is no errors, I've tested and debugged the code inside GetCustomers() and it returns the data - just doesn't display it.
How can I use jquery with wcf service. The following is the method for my wcf service.
[Code]....
I want similar functionality of asp.net ajaxAutocompleteExtender using the jquery. How can I achieve this using jquery?
I've been stymied for a few days on and interface issue with Autocompleteextender and a simple textbox. Is the user types in the textbox while the scroll position of the page is near the top, the autocomplete pops under the textbox, just like it should.However, when I scroll down a little, the autocomplete pops over top of the textbox, making it impossible to see what you are typing. How do I force the autocomplete to pop under the textbox no matter the scroll position of the page? My code is below:
[Code]....
I need to have the contextKey determined by a TextBox. I am trying the approach by kirtid in
http://forums.asp.net/t/1119865.aspx
[Code]....
Both autoComplete and autoComplete2 are null.
What am I doing wrong?
How to do autocomplete textbox Images in asp.net like IMDB or APPLE SITE OR jules.co.uk with database connections..
Note:i have to do similar autocomplete like above mentioned sites..
I want to have textbox auto complete with sql database but i do not want to use ajax extender ...
View 1 RepliesI am using an autocomplete in textbox and the values are from database.It is working fine.What i need is to do this autocomplete thing in listview when i enter any value in textbox. Here is my code
<asp:TextBox ID="txtContactsSearch" runat="server"></asp:TextBox>
<cc1:AutoCompleteExtender ServiceMethod="ListView1_SelectedIndexChanged"
MinimumPrefixLength="2" CompletionInterval="100" EnableCaching="false"
CompletionSetCount="10" TargetControlID="txtContactsSearch"
ID="AutoCompleteExtender1" runat="server" FirstRowSelected = "false"> </cc1:AutoCompleteExtender>
[Code]......
I'm new to ASP.NET MVC and I'm creating an app that will search a contact using using the autocomplete functionality along with jquery.
When I run the project it loads fine and when i click the submit button to search a lastname i receive an error.
Server Error in '/' Application.
The resource cannot be found
Requested URL:/Offender/Search
While attempting this project i followed along witht Northwind MVC Sample and that project also gave me errors as well.
So I got a textbox with an autocomplete source pulled from a database. I am using the follow code to fill the Autocomplete.
txtResource.AutoCompleteCustomSource.AddRange((From row In myComputers.Resources Where row.Active = True And row.ResourceTypeID = CBOResourceType.SelectedValue Select row.Resource).ToArray)
What I would like to do is autocomplete for items in the middle of the search term.For example I have, "Cat","Dog","Dog Horse", "Cat Fish", "Horse Fly"
When I type in Cat my results are: Cat and Cat Fish
When I type in Horse my results are: Horse Fly
I want the results for Horse to be: Dog Horse and Horse Fly. How can I do this?
One thing I really love about web browsers, is the autocomplete feature they have for different controls, like textboxes in forms. However, some times users get confused with the dropdown appearing. So, we would like to be able to disable the autocomplete feature for some textboxes on some of our ASP.NET WebForms pages. Isn't there a property which controls that? Or is that done through JavaScript?
View 3 RepliesI am trying to implement an autocomplete / search from a sqldatabase
ie. Search for customer name by typing first in the textbox
I can use a dropdown, but when I have 300 customers it would be a little hard to do.
I would in normal asp.net use a theme to turn off autocomplete on all text boxes on an entire site. However i cannot do this on MVC because nothing in the theme .skin files seems to work.
I have this in my .skin file:
<asp:TextBox runat="server" autocomplete="off" />
however this does not render at all, of course because this is not how MVC works. Anyway is there any way i can get this sort of thing to work.The site i am trying to do it on is too big to warrant changing every textbox or creating a new HTML helper to solve the issue?
use below styles.
/*AutoComplete flyout */
.autocomplete_completionListElement { margin : 0px!important;
background-color : inherit; color : windowtext;
border : buttonshadow; border-width : 1px; border-style : solid;
cursor : 'default'; overflow : auto; height : 200px; text-align : left; list-style-type : none;}
/* AutoComplete highlighted item */
.autocomplete_highlightedListItem{ background-color: #ffff99;
color: black; padding: 1px;}
/* AutoComplete item */
.autocomplete_listItem { background-color : window; color : windowtext;
padding : 1px;}
the respective markup :
<asp:TextBox runat="server" ID="myTextBox" Width="300" autocomplete="off" /> <ajaxToolkit:AutoCompleteExtender runat="server" BehaviorID="AutoCompleteEx" ID="autoComplete1" TargetControlID="myTextBox"
[code]...
I'm having some difficulty adding an autocomplete extender to a textbox and getting it working.
I've read through the samples and did a quick search on here, but cannot work out why it isn't working.
In a nutshell...
I've added a textbox onto a page, and added the autocomplete extender along with the AutoComplete page method.
Page
[Code]....
Code Behind
[System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
public string[] GetCompletionList(string prefixText, int count, string contextKey)
{
StaffADBLL staff = new StaffADBLL();
DataTable dtStaff = staff.FindStaff(prefixText);
string[] items = new string[dtStaff.Rows.Count];
int i = 0;
foreach (DataRow row in dtStaff.Rows)
{
items.SetValue(row["displayName"].ToString(), i);
i++;
}
return items;
}
I've even tried adding an asmx file, and that doesn't work either.
I get no errors and when I start typing nothing happens, it doesn't even produce a list after 3 characters.
I tried to debug and it doesn't debug through the code, skips it completely.
im new at asp. net and im making a web page with 3 dropdownlist filtering DATA, and then i display a Gridview with the data selected. But i also have some TextBoxs and i want them to autocomplete according to the filters i previously selected. Im working all of this with no code behind.
I Bold The TextBox so you can see it clearly :D.
[Code]....
I want to display Textbox and its Id in AutoComplete.Lets say If i select Po in textbox i have to get 1!postbox in the auto complete.Here 1 is id of postbox text.
View 2 Repliesthe name of my aspx page is display.aspxin header of this page i have called a javascript jscript.jsinside jscript.js there is a call to acomp.aspx which fetches autocomplete results which are displayed on textbox dropdown on display.aspxafter selecting an item from the textbox dropdown, i have to press search btn to response.redirect to other page.but i want to response.redirect as soon as autocomplete item is clicked.this is my textbox with auto-complete feature:
<asp:Textbox ID="search_input" runat="server" Text="Search by Name or Zip Code" AutoPostBack="true" ToolTip="Search by Name or Zip Code" />
this is my aspx.vb code:
Protected Sub search_input_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles search_input.TextChanged
Response.Redirect("~/star/billing/search.aspx? "value=" & search_input.Text)
End Sub
now, onchange of search_input text, my old text is passed inthe response.redirect url.!!! but i want to pass changed text! old text means that text wich is input to start autocomplete
I have 4 xml files.When user select any one xml file and and enter data into textbox
it populates data from xml file.
My xml file is
[Code]....
When User typed as '13' in textbox....how retrive all 13 related data into textbox using autocomplete control. i want populate data
[Code]....
I've writed the follow web service:
[Code]....
And i'm using the AutoComplete like this:
[Code]....
But it's not working (it doesn't suggest any value at all).Am i doing something wrong?