Thursday, February 24, 2011

Filtering or Searching in Listbox Item Using JavaScript

Normally you have a requirement that user want to search or filtering record in a list box according to what he write in textbox.So in my pervious posted Search ListBox items using JavaScript.I explained how to search in listbox but there is one restriction when user want to search, it will select only one record and user can not see the other records related to searching criteria.So in this post I explain how to implement this thing if you have that kind or requirement.

First you write JavaScript code on html page.

 
<script type="text/javascript" language="javascript">
var ddlText, ddlValue, ddl, lblMesg;
function CacheItems() {

ddlText = new Array();
ddlValue = new Array();
ddl = document.getElementById("<%=ListBox1.ClientID %>");
lblMesg = document.getElementById("<%=lblMessage.ClientID%>");
for (var i = 0; i < ddl.options.length; i++) {
ddlText[ddlText.length] = ddl.options[i].text;
ddlValue[ddlValue.length] = ddl.options[i].value;
}
}
window.onload = CacheItems;

function FilterItems(value) {
ddl.options.length = 0;

for (var i = 0; i < ddlText.length; i++) {

if (ddlText[i].toLowerCase().indexOf(value) != -1) {

AddItem(ddlText[i], ddlValue[i]);

}

}

lblMesg.innerHTML = ddl.options.length + " items found.";

if (ddl.options.length == 0) {

AddItem("No items found.", "");

}

}



function AddItem(text, value) {

var opt = document.createElement("option");

opt.text = text;

opt.value = value;

ddl.options.add(opt);

}
</script>



 



The above three JavaScript methods take care of the Filtering and Searching process. The significance of the these methods is described below


1. CacheItems


This method is called on the window onload event. The job of this method is to populate text and value arrays that will be used to cache the List box items.


2. FilterItems


This method is called when keyup event fires in the Search TextBox. This method searches for the string segment and filters the Listbox items.


3. AddItem


This method as the name suggests adds a new item to the Listbox


<body> 

<form id="form1" runat="server">

<asp:TextBox ID="TextBox1" runat="server" onkeyup="FilterItems(this.value)"><br />

<asp:ListBox ID="ListBox1" runat="server" Height="150px" Width="250px">

<asp:ListItem>Vincent</asp:ListItem>

<asp:ListItem>Jennifer</asp:ListItem>

<asp:ListItem>Shynne</asp:ListItem>

<asp:ListItem>Christian</asp:ListItem>

<asp:ListItem>Helen</asp:ListItem>

<asp:ListItem>Vladi</asp:ListItem>

<asp:ListItem>Bee</asp:ListItem>

<asp:ListItem>Jerome</asp:ListItem>

<asp:ListItem>Vinz</asp:ListItem>

<asp:ListItem>Churchill</asp:ListItem>

<asp:ListItem>Rod</asp:ListItem>

<asp:ListItem>Mark</asp:ListItem>

</asp:ListBox>
<asp:Label ID="lblMessage" runat="server" Text=""></asp:Label>
</form>

</body>

</html>


The JavaScript function basically searches the ListBox items and find the items based from the value of the TextBox that was entered. If a keyword exist from the list then it will 
automatically select the ListItems in the ListBox, but if the keyword does not exist then it will clear the ListBox selection.While the label will display the status message to the user

Friday, February 4, 2011

Avoid Multiple Form Submits

 
Multiple form submits is a serious issue in web applications because it’ll result in unexpected behavior like multiple entries in database .I have spent some time for the same in Google and I got some solutions for that.
If you are submitting the page only once then you can use,
<form onsubmit="return Submit();">
And the method is like,
 

<script type="text/javascript">
var flag = false;
function Submit() {
if (flag) {
return false;
}
else {
flag = true;
return true;
}
}
</script>
 



For a single button you can use,

 
btnSubmit.Attributes["onclick"] = "this.disabled=true;" + GetPostBackEventReference(btnSubmit);




 


For pages with update panels multiple submit is a serious issue as page is posting asynchronously or partially.In that scenario you can use Sys.WebForms.PageRequestManager for fixing the issue,

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequest);
function BeginRequest(sender, e) {
e.get_postBackElement().disabled = true;
}
</script>

Tuesday, February 1, 2011

Auto-Refreshing ASP.NET Web Pages

 

Today I am writing about how you can auto-refresh the page without user click .If you want to refresh the page at specific time of interval like after each 10 seconds you can used any of the following methods.

HTML header refresh tag

 

    The most common and best known way to tag of the following format is placed in the HTML section of the page:

    <meta http-equiv="refresh" content=" 5; url=http://dotnetfarrukhabbas.blogspot.com/">

    • where '5' refers to the number of seconds that will elapse before the page is refreshed;

    • 'url' is the new url redirect to. It can be excluded which means the current page will be reloaded.

      This construct is useful if you have one or two pages which have to auto-refresh, and works for any HTML content type forms.

      You can used this meta tag in master page as well as any specific page.

       

      Using JavaScript

      You can also used the JavaScript for auto refreshing the page instead of meta tag.

      <script language="javascript" type="text/javascript"> 

      setTimeout("StratRefresh()", 30000);
      function StratRefresh() {
      window.location.reload();
      }
      </script>



       


      Refresh Page from Server Side


      ASP.NET provides the AppendHeader method to the Response object. Typically the page refresh can be set as follows in an ASP.NET webform (in C#):

      protected void Page_Load(object sender, EventArgs e)
      {
      if (!Page.IsPostBack)
      {
      //page will be refereshed at a interval of 10 sec
      Response.AddHeader("Refresh", "10");
      }
      }



      This construct is useful as it can be placed in a base webform OnLoad() or Page_Load() response method. All derived webforms will then have the same page refresh setting when they are loaded.


      Note 


      when the page gets refresh then it will not persist the view-state of the page.

      Custom Paging And Sorting Using Oracle Stored Procedure.



      Here I will explain how to create Oracle stored procedure for custom paging,sorting and base on culture .Normally you should know how many record found in table base on where clause as well as required dynamic sorting and paging.All these things possible using dynamic creation of oracle stored procedure see this give below example.

      
      

      CREATE OR REPLACE PROCEDURE GET_COUNTRY
      (
      //-------- Table Paramerters--------------------------------
      V_COUNTRY_NO IN TRN_ORG_SYS.COUNTRY.COUNTRY_NO%TYPE DEFAULT NULL
      ,V_COUNTRY_NAME_AR IN TRN_ORG_SYS.COUNTRY.COUNTRY_NAME_AR%TYPE DEFAULT NULL
      ,V_COUNTRY_NAME_EN IN TRN_ORG_SYS.COUNTRY.COUNTRY_NAME_EN%TYPE DEFAULT NULL
      ,V_CREATED_BY IN TRN_ORG_SYS.COUNTRY.CREATED_BY%TYPE DEFAULT NULL
      ,V_CREATED_ON IN TRN_ORG_SYS.COUNTRY.CREATED_ON%TYPE DEFAULT NULL
      ,V_MODIFIED_BY IN TRN_ORG_SYS.COUNTRY.MODIFIED_BY%TYPE DEFAULT NULL
      ,V_MODIFIED_ON IN TRN_ORG_SYS.COUNTRY.MODIFIED_ON%TYPE DEFAULT NULL
      ,V_ISDELETED IN TRN_ORG_SYS.COUNTRY.ISDELETED%TYPE DEFAULT NULL
      
      //-------- Parameters of Paging Sorting and culture------------
      ,P_CULTURE IN VARCHAR2 DEFAULT NULL
      ,P_SORT_ORDER IN VARCHAR2 DEFAULT NULL
      ,P_SORT_FIELD IN VARCHAR2 DEFAULT NULL
      ,P_PAGE_NO_NEEDED IN NUMBER DEFAULT NULL
      ,P_NUM_PER_PAGE IN NUMBER DEFAULT NULL
      ,P_OUT_TOTAL_RECORDS OUT NUMBER
      ,ITEMS_CURSOR OUT TRN_ORG_PROC.REF_CURSOR.T_CURSOR
      )
      IS
      --Local variables >>>>>>>
      SQL_SELECT CLOB;
      SQL_SELONE VARCHAR2(4000);
      SQL_SELTWO VARCHAR2(4000);
      SQL_COUNTONE VARCHAR2(50) := 'SELECT COUNT(*) FROM ( ';
      SQL_COUNTTWO VARCHAR2(50) := ') ';
      SQL_ORDER_BY VARCHAR2(100);
      FROM_ROWNUM NUMBER;
      TO_ROWNUM NUMBER;
      V_NUM_PER_PAGE NUMBER := P_NUM_PER_PAGE;
      V_PAGE_NO_NEEDED NUMBER := P_PAGE_NO_NEEDED;
      V_SORT_FIELD VARCHAR2(30);
      V_SORT_ORDER VARCHAR2(30);
      NEWLINE VARCHAR2(10) := CHR(13) || CHR(10);
      
      
      
      --Local variables <<<<<<<
      BEGIN
      IF (V_NUM_PER_PAGE IS NULL OR V_NUM_PER_PAGE <= 0) THEN
      V_NUM_PER_PAGE := 25;
      END IF;
      IF (V_PAGE_NO_NEEDED IS NULL OR V_PAGE_NO_NEEDED <= 0) THEN
      V_PAGE_NO_NEEDED := 1;
      END IF;
      IF (P_SORT_FIELD IS NULL) THEN
      V_SORT_FIELD := ' COUNTRY_NO';
      ELSE
      V_SORT_FIELD := P_SORT_FIELD;
      END IF;
      IF (P_SORT_ORDER IS NULL) THEN
      V_SORT_ORDER := 'ASC';
      ELSE
      V_SORT_ORDER := P_SORT_ORDER;
      END IF;
      --
      FROM_ROWNUM := ((V_PAGE_NO_NEEDED - 1) * V_NUM_PER_PAGE) + 1;
      TO_ROWNUM := FROM_ROWNUM -1 + V_NUM_PER_PAGE;
      SQL_SELONE := SQL_SELONE || 'SELECT ' || NEWLINE;
      SQL_SELONE := SQL_SELONE || ' b.* ' || NEWLINE;
      SQL_SELONE := SQL_SELONE || ' FROM ( ' || NEWLINE;
      SQL_SELONE := SQL_SELONE || ' SELECT ' || NEWLINE;
      SQL_SELONE := SQL_SELONE || ' a.*, ' || NEWLINE;
      SQL_SELONE := SQL_SELONE || ' ROWNUM rnum ' || NEWLINE;
      SQL_SELONE := SQL_SELONE || ' FROM ( ' || NEWLINE;
      --
      SQL_SELECT := SQL_SELECT || 'SELECT TRN_ORG_SYS.COUNTRY.COUNTRY_NO, 
      DECODE('''|| P_CULTURE ||''''||',
      ''en-US'',TRN_ORG_SYS.COUNTRY.COUNTRY_NAME_EN ,
      ''ar-KW'',TRN_ORG_SYS.COUNTRY.COUNTRY_NAME_AR,
      TRN_ORG_SYS.COUNTRY.COUNTRY_NAME_EN) COUNTRY_NAME,
      TRN_ORG_SYS.COUNTRY.COUNTRY_NAME_AR, 
      TRN_ORG_SYS.COUNTRY.COUNTRY_NAME_EN, 
      TRN_ORG_SYS.COUNTRY.CREATED_BY, 
      TRN_ORG_SYS.COUNTRY.CREATED_ON, 
      TRN_ORG_SYS.COUNTRY.MODIFIED_BY, 
      TRN_ORG_SYS.COUNTRY.MODIFIED_ON, 
      TRN_ORG_SYS.COUNTRY.ISDELETED 
      FROM TRN_ORG_SYS.COUNTRY' || NEWLINE;
      --Construction of Where clause Starts here
      SQL_SELECT := SQL_SELECT || ' WHERE 1 = 1 ' || NEWLINE;
      
      IF(V_COUNTRY_NO IS NOT NULL AND V_COUNTRY_NO > 0 ) THEN
      SQL_SELECT := SQL_SELECT || ' AND COUNTRY.COUNTRY_NO = ' || V_COUNTRY_NO || '' || NEWLINE;
      END IF; 
      IF(V_COUNTRY_NAME_AR IS NOT NULL) THEN
      SQL_SELECT := SQL_SELECT || ' AND COUNTRY.COUNTRY_NAME_AR Like ''%' || V_COUNTRY_NAME_AR || '%''' || NEWLINE;
      END IF; 
      IF(V_COUNTRY_NAME_EN IS NOT NULL) THEN
      SQL_SELECT := SQL_SELECT || ' AND COUNTRY.COUNTRY_NAME_EN Like ''%' || V_COUNTRY_NAME_EN || '%''' || NEWLINE;
      END IF; 
      IF(V_CREATED_BY IS NOT NULL) THEN
      SQL_SELECT := SQL_SELECT || ' AND COUNTRY.CREATED_BY Like ''%' || V_CREATED_BY || '%''' || NEWLINE;
      END IF; 
      IF(V_CREATED_ON IS NOT NULL) THEN
      SQL_SELECT := SQL_SELECT || ' AND COUNTRY.CREATED_ON = ''' || V_CREATED_ON || '''' || NEWLINE;
      END IF; 
      IF(V_MODIFIED_BY IS NOT NULL) THEN
      SQL_SELECT := SQL_SELECT || ' AND COUNTRY.MODIFIED_BY Like ''%' || V_MODIFIED_BY || '%''' || NEWLINE;
      END IF; 
      IF(V_MODIFIED_ON IS NOT NULL) THEN
      SQL_SELECT := SQL_SELECT || ' AND COUNTRY.MODIFIED_ON = ''' || V_MODIFIED_ON || '''' || NEWLINE;
      END IF; 
      IF(V_ISDELETED IS NOT NULL AND V_ISDELETED > 0 ) THEN
      SQL_SELECT := SQL_SELECT || ' AND COUNTRY.ISDELETED = ' || V_ISDELETED || '' || NEWLINE;
      END IF; 
      --Construction of Where clause Ends here
      
      SQL_ORDER_BY := SQL_ORDER_BY || ' ORDER BY lower(' || V_SORT_FIELD || ') ' || V_SORT_ORDER || NEWLINE;
      --
      SQL_SELTWO := SQL_SELTWO || ' ) a ' || NEWLINE;
      SQL_SELTWO := SQL_SELTWO || ' WHERE ' || NEWLINE;
      SQL_SELTWO := SQL_SELTWO || ' ROWNUM <= :2) b ' || NEWLINE; -- TO_ROWNUM
      SQL_SELTWO := SQL_SELTWO || ' WHERE ' || NEWLINE;
      SQL_SELTWO := SQL_SELTWO || ' rnum >= :3 ' || NEWLINE; -- FROM_ROWNUM
      --
      EXECUTE IMMEDIATE SQL_COUNTONE || TO_CHAR(SQL_SELECT) || SQL_COUNTTWO INTO P_OUT_TOTAL_RECORDS;
      --
      OPEN ITEMS_CURSOR FOR SQL_SELONE || TO_CHAR(SQL_SELECT) || SQL_ORDER_BY || SQL_SELTWO USING TO_ROWNUM, FROM_ROWNUM;
      
      EXCEPTION
      WHEN NO_DATA_FOUND THEN
      NULL;
      WHEN OTHERS THEN
      -- Consider logging the error and then re-raise
      RAISE;
      END GET_COUNTRY;
      


      Base on above example you can easily create oracle stored procedure for custom paging, sorting,total record found and base on culture.

      call server side method from client side using script manager

       

       

       

      Hello friends.

      I am going to share with you a concept to call server side method from client side using script manager.

      Step 1 : Put ScriptManager on .ASPX page.

      Step 2 : Set EnablePageMethods="True" in ScriptManager.

      Step 3 : Create one static method in server side that return some value.

      Step 4 : Set WebMethod attribute to above the method.

      Step 5 : Create one javascript  function and call server side method using PageMethods object and set callback method as argument.

      Step 6 : Create callback method where you will be able to retrieve return parameter from server side method.

      See following example code

      ScriptManager on the page.

      <asp:ScriptManager ID="ScriptManager1"  EnablePageMethods="true" runat="server">
      </asp:ScriptManager>



      My server side static method

      [System.Web.Services.WebMethod]
      public static int Sum(int value1, int value2)
      {
      return value1 + value2;
      }



      My javascript function to call server side method and retrieve result from server side

      <script language="javascript" type="text/javascript">
      pageMethodConcept={
      callServerSideMethod:function(){
      PageMethods.Sum(3,4,pageMethodConcept.callback);

      // I am passing 3 and 4 to get sum and set callback method
      },
      callback:function(result){
      alert(result);
      }
      }
      window.onload=pageMethodConcept.callServerSideMethod;
      </script>

      PDF Arabic watermark using MVC and iTextSharp

      PDF full page Arabic watermark using MVC and iTextSharp Download :  Source Code Most of the time we have requirement to  gen...