Excel sheet is not exporting - javascript

I need to generate excel report based on the dates selected. Every things works fine but my excel sheet is not generating but its working fine when i try to export in web forms. But if i use master page and content page its not working..
here is my code
aspx
<center>
<table>
<tr>
<td>
<asp:Label ID="Label1" runat="server" Text="Start Date:" style="color:white"></asp:Label>
</td>
<td>
<asp:TextBox ID="datepicker" runat="server"></asp:TextBox>
</td>
<td>
<img src="../Images/calendar.gif" id ="datepic"/>
<cc1:calendarextender ID="ceFromDate" runat="server" TargetControlID="datepicker"
Format="dd-MMM-yyyy" Enabled="True" PopupButtonID="datepic" CssClass="black">
</cc1:calendarextender>
</td>
</tr>
<br />
<br />
<tr>
<td>
<asp:Label ID="Label2" runat="server" Text="End Date:" style="color:white"></asp:Label>
</td>
<td>
<asp:TextBox ID="datepicker1" runat="server"></asp:TextBox>
</td>
<td>
<img src="../Images/calendar.gif" id="datepic1" />
<cc1:calendarextender ID="Calendarextender1" runat="server" TargetControlID="datepicker1"
Format="dd-MMM-yyyy" Enabled="True" PopupButtonID="datepic1" CssClass="black">
</cc1:calendarextender>
</td>
</tr>
<tr>
<td>
<asp:Button ID="Button1" runat="server" Text="Get Report" OnClick="Button1_Click" />
</td>
</tr>
</table>
<asp:GridView ID="GridView1" runat="server" ></asp:GridView>
</center>
cs code:
protected void Button1_Click(object sender, EventArgs e)
{
using (OracleConnection con = new OracleConnection(constr))
{
//for getting id
con.Open();
OracleCommand cmd = new OracleCommand("select adcomplain_no as \"AD COMPLAIN NO\",to_char( COMPLAINT_DATE,'DD/MM/YY') as \"COMPLAINT DATE\",nature_of_complaint as \"NATURE OF COMPLAINT\",(select categoryname from crs_categorynew where crsid=complaint_categoryID)as \"CATEGORY NAME\",(SELECT subcategoryname FROM CRS_SUDCATEGORYNEW WHERE CRSSUBID=complaint_subcategory) as \"SUB CATEGORY NAME\",seat_location AS \"SEAT LOCATION\",seatno AS \"SEAT NO\",extensionno AS \"EXTENSION NO\",to_char(entry_date,'DD/MM/YY')as \"ENTRY DATE\" ,(select staffno||'-'||NAME as name from employee where staffno=entry_by) as \"ENTRY BY\" ,(CASE STATUSFLAG WHEN 'U' THEN 'Un Allotted' WHEN 'AN' THEN 'Allotted' WHEN 'B' THEN 'Being Completed' WHEN 'C' THEN 'Completed' WHEN 'UA' THEN 'Un Attented' ELSE '' END)as \"STATUS\",(select staffno||'-'||NAME as name from employee where staffno=alloted_person) as \"ALLOTED PERSON\",to_char(target_date,'DD/MM/YY') as \"TARGET DATE\",(select staffno||'-'||NAME as name from employee where staffno=alloted_by) as \"ALLOTED BY\",to_char(alloted_date,'DD/MM/YY') as \" ALLOTED DATE\",complain_reason as SOLUTION,to_char(complain_statusdate, 'DD/MM/YY')as \"COMPLAIN STATUS DATE\",(select staffno||'-'||NAME as name from employee where staffno=complain_statusby)AS \"COMPLAIN STATUS BY\" from crs_complaint where complaint_date between (TO_DATE('" + datepicker.Text + "', 'dd/mm/yyyy')) and (TO_DATE('" + datepicker1.Text + "', 'dd/mm/yyyy'))", con);
OracleDataAdapter oda = new OracleDataAdapter(cmd);
DataTable dt = new DataTable();
oda.Fill(dt);
if (dt.Rows.Count > 0)
{
GridView1.DataSource = dt;
GridView1.DataBind();
}
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition",
"attachment;filename=GridViewExport.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
for (int i = 0; i < GridView1.Rows.Count; i++)
{
//Apply text style to each Row
GridView1.Rows[i].Attributes.Add("class", "textmode");
}
GridView1.RenderControl(hw);
string headerTable = #"<h1>Service Request List from '" + datepicker.Text + "' to '" + datepicker1.Text + "'</h1>";
//style to format numbers to string
string style = #"<style> .textmode { mso-number-format:\#; } </style>";
//Range rg = (Excel.Range)worksheetobject.Cells[1, 1];
//rg.EntireColumn.NumberFormat = "MM/DD/YYYY";
Response.Write(headerTable);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
con.Close();
}
}
public override void VerifyRenderingInServerForm(Control control)
{
/* Confirms that an HtmlForm control is rendered for the specified ASP.NET
server control at run time. */
}

cretae a trigger for the button in updatepanel, this may solve your problem..
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
</asp:UpdatePanel>

Related

Asp. Net Get Confirmation Popup Based on Condition and Get its Value at Code Behind

In the below code there is a radiobuttonlist control and Multiline textbox. On button click I would need to check whether textbox query should contain any WHERE clause. If yes then will get executed directly, but if not then should get confirmation box. If clicked on "Ok" then should get proceed but if clicked on "Cancel" then process get terminated there itself.
In my case confirmation box is not popping up and how to get it's value at code behind?
For this I would have followed an article as
https://www.aspsnippets.com/Articles/Server-Side-Code-Behind-Yes-No-Confirmation-Message-Box-in-ASPNet.aspx
below is my code
HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script>
function alertmsg(m) {
alert(m);
}
function alertmsgwithYesNo(m) {
var confirm_value = document.createElement("INPUT");
confirm_value.type = "hidden";
confirm_value.name = "confirm_value";
if (confirm(m)) {
confirm_value.value = "Yes";
} else {
confirm_value.value = "No";
}
document.forms[0].appendChild(confirm_value);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<table width="100%">
<tr>
<td align="center" valign="top">
<table cellspacing="5">
<tr>
<td align="left" valign="top"><strong>Options : </strong>
<asp:RadioButtonList ID="RadioButtonListoptions" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Value="1">Execute Directly</asp:ListItem>
<asp:ListItem Value="2">Display In Gridview</asp:ListItem>
<asp:ListItem Value="3">Display On Label</asp:ListItem>
</asp:RadioButtonList> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Select option" ControlToValidate="RadioButtonListoptions" Display="Dynamic" SetFocusOnError="true" ForeColor="Red"></asp:RequiredFieldValidator></td>
</tr>
<tr>
<td align="left" valign="top">
<asp:TextBox ID="TextBoxQuery" runat="server" TextMode="MultiLine" Height="400px" Width="800px" placeholder="Enter query..." Font-Size="Large" Text="" Style="padding: 5px;"></asp:TextBox>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="Enter your query" ControlToValidate="TextBoxQuery" Display="Dynamic" SetFocusOnError="true" ForeColor="Red"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="center">
<asp:Button ID="ButtonSubmitQuery" runat="server" Text="Submit" Width="200px" Height="30px" OnClick="ButtonSubmitQuery_Click" /></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center" valign="top">
<asp:Label ID="LabelShowData" runat="server" Text="Label Here"></asp:Label>
<asp:GridView ID="GridViewData" runat="server" AutoGenerateColumns="true" EmptyDataText="No record found."></asp:GridView>
<asp:SqlDataSource ID="SqlDataSourceData" runat="server"></asp:SqlDataSource>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
C#:
protected void ButtonSubmitQuery_Click(object sender, EventArgs e)
{
if (RadioButtonListoptions.SelectedIndex != -1)
{
if (Convert.ToInt32(RadioButtonListoptions.SelectedItem.Value.ToString()) == 1)
{
if (!TextBoxQuery.Text.ToString().Contains("Where"))
{
ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "message", "alertmsgwithYesNo('Entered query did not have WHERE condition.');", false);
//ClientScript.RegisterClientScriptBlock(this.GetType(), "UpdateTime", "alertmsgwithYesNo('Query did not have WHERE Condition. Do you want to run it without Where Con');", true);
string confirmValue = Request.Form["confirm_value"];
Label1.Text = confirmValue;
return;
}
using (SqlConnection conn = new SqlConnection(vali.constr))
{
try
{
using (SqlCommand cmdsql = new SqlCommand(TextBoxQuery.Text.Trim()))
{
conn.Open();
int count = cmdsql.ExecuteNonQuery();
if (count > 0)
{
ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "message", "alertmsg('Select Option');", false);
}
}
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
}
}
}
else
{
ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "message", "alertmsg('Select Option');", false);
return;
}
}

How to save more that one row of text to database by adding input fields dynamically?

What I have and doing at the moment:
When the webpage loads the user is presented with form fields to type in some information
then the user has the option the add more fields and add more information.
Then once the user is done they can click on the save button and then it will save the information to my database.
This is the code I have at the moment:
aspx
<script type="text/javascript">
function ExtractData() {
var strValue = GetString();
alert(strValue);
if (strValue != "ERROR") {
E("<%=hdnData.ClientID %>").value = strValue;
return true;
} else {
return false;
}
}
function GetString() {
return "Item:" + E("item1").value + ";Quantity:" + E("qty1").value + ";Cost:" + E("cost1").value + ";Price:" + E("price1").value;
}
function E(id) {
return document.getElementById(id);
}
</script>
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
</style>
<script type="text/javascript">
function sum() {
var val1 = document.getElementById('TextBox4').value;
var val2 = document.getElementById('TextBox5').value;
var sum = Number(val1) + Number(val2);
document.getElementById('TextBox6').value = sum;
}
</script>
<div class="container-fluid">
<table id="dataTable" width="350px" border="1" style="border-collapse: collapse;">
<tr>
<th>Select</th>
<th>Item Number</th>
<th>Description</th>
<th>Qty</th>
<th>Rate</th>
<th formula="cost*qty" summary="sum">Price</th>
</tr>
<tr>
<td>
<input type="checkbox" name="chk[]" /></td>
<td>1 </td>
<td>
<input type="text" id="item1" name="item[]" />
</td>
<td>
<input type="text" id="qty1" name="qty[]" />
</td>
<td>
<input type="text" id="cost1" name="cost[]" />
</td>
<td>
<input type="text" id="price1" name="price[]" />
</td>
</tr>
</table>
<br />
<input type="button" class="btn-warning" value="Add Row" onclick="addRow('dataTable')" />
<input type="button" class="btn-danger" value="Delete Row" onclick="deleteRow('dataTable')" />
<input type="button" class="btn-info" value="Total" onclick="totalIt()" />
<asp:ImageButton ID="submitButton" runat="server" src="images/send.gif"
OnClientClick="return ExtractData();" OnClick="saveQuote_Click" /><br />
<asp:HiddenField ID="hdnData" Value="" runat="server" />
<asp:Label ID="message" runat="server" />
</div>
aspx.cs
string connStr = #"connection string to database";
protected void saveQuote_Click(object sender, EventArgs e)
{
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connStr);
try
{
conn.Open();
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(#"INSERT INTO tbl_newQuotes(Item,Description,Rate,Quantity,Price) values(#Item,#Description,#Rate,#Quantity,#Price)", conn);
cmd.Parameters.AddWithValue("#Item", GetStr("Item"));
cmd.Parameters.AddWithValue("#Description", GetStr("Item"));
cmd.Parameters.AddWithValue("#Rate", GetStr("Quantity"));
cmd.Parameters.AddWithValue("#Quantity", GetStr("Cost"));
cmd.Parameters.AddWithValue("#Price", GetStr("Price"));
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
}
finally
{
conn.Close();
}
}
private string GetStr(string title)
{
string[] mystr = hdnData.Value.Split(";".ToCharArray());
string value = string.Empty;
foreach (string Str in mystr)
{
string[] namePair = Str.Split(":".ToCharArray());
if (namePair[0] == title)
{
value = namePair[1];
break;
}
}
return value;
}
The Problem I am facing
So as you can see the above code reads the input values by using jscript and extracting it then saves to the database. All of this works well, but when the users adds more field the that data is not saved only the first field does.
I need to get it to save every row of input fields added to the database.
Any help will be appreciated.
Thanks
To update grids or repeating data? You don't hard code this, you use one of MANY data aware and data repeating controls.
I like listview over grid view. I used the wizards to generate this, deleted all the templates and now have this markup:
<form id="form1" runat="server">
<div>
<link href="Content/cuscosky.css" rel="stylesheet" />
<asp:ListView ID="ListView1" runat="server" DataKeyNames="ID" >
<EmptyDataTemplate>
<table runat="server" style="">
<tr>
<td>No data was returned.</td>
</tr>
</table>
</EmptyDataTemplate>
<ItemTemplate>
<tr id="myTable1" style="">
<td><asp:Label ID="IDLabel1" runat="server" Text='<%# Eval("ID") %>' /></td>
<td><asp:TextBox ID="DescriptionTextBox" runat="server" Text='<%# Eval("Description") %>' /></td>
<td><asp:TextBox ID="tQty" runat="server" Text='<%# Eval("Qty") %>' style="width:40px"
onchange="updatecost(this.id,'tQty');" />
</td>
<td>
<asp:TextBox ID="tUnitPrice" runat="server" Text='<%# Eval("UnitPrice") %>' style="width:70px;text-align:right"
onchange="updatecost(this.id,'tUnitPrice');"/>
</td>
<td><asp:TextBox ID="tCost" runat="server" Text='<%# Eval("Qty") * Eval("UnitPrice") %>' style="width:70px;text-align:right" /></td>
</tr>
</ItemTemplate>
<LayoutTemplate>
<table id="itemPlaceholderContainer" runat="server" border="0" >
<tr runat="server" style="">
<th runat="server">ID</th>
<th runat="server">Description</th>
<th runat="server">Qty</th>
<th runat="server">UnitPrice</th>
<th runat="server">Cost</th>
</tr>
<tr id="itemPlaceholder" runat="server">
</tr>
</table>
</LayoutTemplate>
</asp:ListView>
<asp:TextBox ID="TextBox1" runat="server" ClientIDMode="Static"></asp:TextBox>
<script>
function updatecost(p, ctl) {
var Qty = $('#' + p.replace(ctl, "tQty"));
var UPric = $('#' + p.replace(ctl, "tUnitPrice"));
var Cost = $('#' + p.replace(ctl, "tCost"));
Cost.val(Qty.val() * UPric.val());
}
</script>
</div>
</form>
As you can see, we don't have a lot of markup.
Now, to load up this grid in code? I have this code:
public class LvInvoiceEDit : System.Web.UI.Page
{
private DataTable rstTable = new DataTable();
protected void Page_Load(object sender, System.EventArgs e)
{
if (System.Web.UI.Page.IsPostBack == false)
{
LoadGrid();
System.Web.UI.Page.Session["rstTable"] = rstTable;
}
else
rstTable = System.Web.UI.Page.Session["rstTable"];
}
public void LoadGrid()
{
string strSQL = "";
strSQL = "SELECT ID, Description, Qty, UnitPrice, Cost FROM InvoiceDetails";
using (SqlCommand cmdSQL = new SqlCommand(strSQL, new SqlConnection(My.Settings.Test3)))
{
cmdSQL.Connection.Open();
rstTable.Load(cmdSQL.ExecuteReader);
ListView1.DataSource = rstTable;
ListView1.DataBind();
}
}
}
Not a lot of code so far, right? Well, we now have this grid:
Now I did play with some JavaScript to update the qty - I think I'll leave that for another day - but it does update quite nice.
So the NEXT big question then is HOW do I save the edit changes back to the data base?
Well, assuming we drop a save button below? Then this code will work:
protected void Button1_Click(object sender, EventArgs e)
{
// save all edits in the grid back to the table:
foreach (ListViewDataItem gvRow in ListView1.Items)
{
int ix = gvRow.DataItemIndex;
{
var withBlock = rstTable.Rows(gvRow.DataItemIndex);
withBlock.Item("Description") = gvRow.FindControl("DescriptionTextBox") as TextBox.Text;
withBlock.Item("Qty") = gvRow.FindControl("tQty") as TextBox.Text;
withBlock.Item("UnitPrice") = gvRow.FindControl("tUnitPrice") as TextBox.Text;
withBlock.Item("Cost") = gvRow.FindControl("tCost") as TextBox.Text;
}
}
// ok, grid is back to the table. Now send table back to database.
using (SqlCommand cmdSQL = new SqlCommand("SELECT ID, Description, Qty, UnitPrice, Cost FROM InvoiceDetails where id = 0",
new SqlConnection(My.Settings.Test3)))
{
SqlDataAdapter da = new SqlDataAdapter(cmdSQL);
SqlCommandBuilder cmdUpdate = new SqlCommandBuilder(da);
da.Update(rstTable);
}
}
So a few things:
See any mess or truckload of parameters in above? (no!).
Does it matter if we have 3 rows or 30 rows to update? (no!).
Did we really need to write any JavaScript? (no!).
So for bonus points, we probably in the save button should update the total box on the form.
Also, if you not doing a grid? Then I would tag your controls, write a loop to grab the controls into the table. And another routine to take a row and fill the controls. Once you write that routine? ( a fwriter, and rreader to pull or push one data row out to the controls?). Then you can use that fwriter/fread routine to update 5 or 50 controls on a form - and it will only take 2-3 lines of code to udpate those 3 or 40 controls on the form. So be it a grid (repeating rows), or that of just a bunch of controls on the form? You don't need to write and setup a gazillion things (don't need parameters - don't matter if 5 or 40 controls). And in the case of a table like layout (listview), it don't matter if we have 3 or 20 rows of data - its the SAME amount of code and work. This is how things were done on desktop - and the same applies to the web - you don't write code to inject repeating data (well, unless you say using PHP or some such). In asp.net land? We use data repeaters - and save world poverty in terms of the amount of code you do NOT have to write!
And like any desktop software for repeating data? you build the grid - fill it with data. You don't re-add controls on the form manually unless you looking to really make a huge amount of work when none is required.
So, the only trick/issue left? We need a add row button. I'll come back later today and post a few lines for that.
Edit:
code to add a row? Drop a button below the grid, and thus the code is this to add a new row:
protected void Button2_Click(object sender, EventArgs e)
{
// add a new row to the table.
{
var MyNewRow = rstTable.Rows.Add;
MyNewRow.Item("Description") = "new row";
MyNewRow.Item("Qty") = 1;
MyNewRow.Item("UnitPrice") = 0;
MyNewRow.Item("Cost") = 0;
}
// display this new row to the grid
ListView1.DataSource = rstTable;
ListView1.DataBind();
}

javascript hide table when enter invalid id in c#

Here is my c#:
protected void btnsearch_Click(object sender, EventArgs e)
{
SqlConnection con = Connection.DBconnection(); {
SqlCommand com = new SqlCommand("sp_studentresult", con);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("#id", textstudentid.Text);
com.Parameters.AddWithValue("#id_student", textstudentid.Text.Trim());
SqlParameter retval = new SqlParameter("#output", SqlDbType.VarChar, 50);
retval.Direction = ParameterDirection.Output;
com.Parameters.Add(retval);
com.ExecuteNonQuery();
string Output = retval.Value.ToString();
output.Text = Output;
SqlDataAdapter adp = new SqlDataAdapter(com);
DataSet ds = new DataSet();
adp.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
txtid.Text = ds.Tables[0].Rows[0]["id"].ToString();
txttamil.Text = ds.Tables[0].Rows[0]["Tamil"].ToString();
txtenglish.Text = ds.Tables[0].Rows[0]["English"].ToString();
txtmaths.Text = ds.Tables[0].Rows[0]["Maths"].ToString();
txtscience.Text = ds.Tables[0].Rows[0]["Science"].ToString();
txtsocialscience.Text = ds.Tables[0].Rows[0]["SocialScience"].ToString();
}
}
http://s8.postimg.org/n2unbqufp/untitled.jpg <== output screenshot
And here is my aspx:
<table style="width: 60%;" align="center">
<tr>
<td>
<asp:Label ID="output" runat="server" Text=""></asp:Label>
</td>
</tr>
<tr>
<th>Subject Title</th>
<th>Marks</th></tr>
<tr>
<td><asp:Label ID="lblt" runat="server" Text="Tamil"></asp:Label></td>
<td><asp:TextBox ID="txttamil" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td><asp:Label ID="lble" runat="server" Text="English"></asp:Label></td>
<td><asp:TextBox ID="txtenglish" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td><asp:Label ID="lblm" runat="server" Text="Maths"></asp:Label></td>
<td><asp:TextBox ID="txtmaths" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td><asp:Label ID="lbls" runat="server" Text="Science"></asp:Label></td>
<td><asp:TextBox ID="txtscience" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td><asp:Label ID="lblss" runat="server" Text="socialscience"></asp:Label></td>
<td><asp:TextBox ID="txtsocialscience" runat="server"></asp:TextBox></td>
</tr>
<tr><td>
<asp:Button ID="searchupdate" runat="server" Text="Update" OnClick="searchupdate_Click" OnClientClick="return update();" /></td>
</tr>
</table>
Finally storedprocedure:
ALTER PROCEDURE sp_studentresult
(
#id int,
#output varchar(50) output,
#id_student varchar(50)
)
AS
IF NOT EXISTS (SELECT * FROM student WHERE id=#id_student)
BEGIN
SET #output='Doesn not EXIST'
END
SELECT * from studentresult where id_student=#id
I have added search box above the table.. when i enter invalid id, and hit search, below displayed textboxes need to be hide. If i enter valid id and search then only it shows textboxes which are used for update and delete.
May i how to do that? I'm new to .net.
Can anyone guide me?

Adding DropDown-Selectedvalue to ContextKey of Autocomplete control Using Javascript

I'm having a Drop-down-list and a Text-box with auto-completed extender on my web form.
Now i need to set ContextKey property of auto-completed extender from java-script.
I'm trying to set ContextKey property using java-script on onkeyup event of text-box. But it's not working
.aspx code
<table>
<tr>
<td style="width:100px;">
<asp:Label ID="Label1" CssClass="lbl" runat="server" Text="Server:"></asp:Label>
</td>
<td colspan="4">
<asp:DropDownList ID="DropDownList1" CssClass="Comb" runat="server"
OnSelectedIndexChanged="ddlServer_SelectedIndexChanged" AutoPostBack="true">
</asp:DropDownList>
</td>
</tr>
<tr>
<td>
<asp:Label ID="Label2" CssClass="lbl" runat="server" Text="Originating:"></asp:Label>
</td>
<td colspan="4">
<asp:TextBox runat="server" ID="TextBox1" CssClass="tb10" autocomplete="off" onkeyup="SetContextKey()"/>
<ajaxToolkit:AutoCompleteExtender TargetControlID="TextBox1" UseContextKey="true"
runat="server" BehaviorID="AutoCompleteEx" ID="AutoCompleteExtender1"
ServicePath="AutoComplete.asmx" ServiceMethod="GetResellerList"
MinimumPrefixLength="1" CompletionInterval="1000" EnableCaching="true" FirstRowSelected="true"
CompletionSetCount="20" CompletionListCssClass="cssList" DelimiterCharacters=";, :"
ShowOnlyCurrentWordInCompletionListItem="true" OnClientHiding="OnClientCompleted"
OnClientPopulated="OnClientCompleted" OnClientPopulating="OnClientPopulating">
</ajaxToolkit:AutoCompleteExtender>
</td>
</tr>
</table>
.cs code (Service Code)
[WebMethod]
public string[] GetResellerList(string prefixText, int count, string contextKey)
{
DataSet ds = new DataSet();
ds = clsTransaction.Select("SELECT nm AS Name FROM tblReseller WHERE nm LIKE '" + prefixText + "%' AND wsid = '" + contextKey + "'",
DataSendBSSWEB.ServerDbEnum.MainSqlServer,
false);
//Then return List of string(txtItems) as result
List<string> txtItems = new List<string>();
String dbValues;
foreach (DataRow row in ds.Tables[0].Rows)
{
dbValues = row["Name"].ToString();
txtItems.Add(dbValues);
}
return txtItems.ToArray();
}
javascript Code
<script type="text/javascript">
function SetContextKey() {
$find('<%=autoComplete2.ClientID%>').set_contextKey($get("<%=ddlServer.ClientID %>").value);
}
</script>
Can any one tell me how can i do this using java-script.
Target control id of the extender should be the TextBox's Id, Not the drop down's.

How to tell how many datalists in page with JavaScript

This is an ascx page and the code is in aspx. It will show more than one datalist. How can I get the number of datalists in the page through JavaScript?
<asp:DataList ID="TF_DataList" runat="server" RepeatDirection="Vertical" OnItemCreated="TF_Datalist_ItemCreated">
<ItemTemplate>
<table style="text-align:left;">
<tr>
<td valign="top" align="left" nowrap="nowrap">
<asp:RadioButton ID="lbTrue" runat="server" GroupName="ans" Text="T" onclick="Radcheck();"
/>
<asp:RadioButton ID="lbFalse" runat="server" GroupName="ans" Text="F" onclick="Radcheck();"
/>
</td>
<td>
</td>
<td runat="server" id="AnswerContentTD" style="text-align: left">
<asp:Label ID="lblAnswerText" runat="server" Text='<%# Eval("AnswerText")%>'>
</asp:Label>
</td>
</tr>
</table>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left">
</ItemStyle>
</asp:DataList>
The best you can do is this work around. Give a CssClass="mydatalist" to every datalist in your page. Please rememeber these things.
All your asp:DataList must have this CssClass
Only the asp:DataList must have this CssClass
Javascript implementation.
function FindDataLists(){
var datalists = document.getElementsByClassName("mydatalist");
return datalists ? datalists.length : 0;
}
// fallback for LTE IE8
if (!document.getElementsByClassName) {
document.getElementsByClassName = function (className, parentElement) {
if (Prototype.BrowserFeatures.XPath) {
var q = ".//*[contains(concat(' ', #class, ' '), ' " + className + " ')]";
return document._getElementsByXPath(q, parentElement);
} else {
var children = ($(parentElement) || document.body).getElementsByTagName('*');
var elements = [],
child;
for (var i = 0, length = children.length; i < length; i++) {
child = children[i];
if (Element.hasClassName(child, className)) elements.push(Element.extend(child));
}
return elements;
}
};
}
If you are using jQuery
function FindDataLists(){
var datalists = document.getElementsByClassName("mydatalist");
return $(".").length;
}
<asp:DataList> does not generate any html tags for itself. So you can only define the number of <table style="text-align:left;"> elements on your page. Add an name attribute to them and count elements with such name.

Categories

Resources