This is a migrated thread and some comments may be shown as answers.

Signature Image Erased from Rad AsSync control after Firing Popup

6 Answers 168 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Venkateswarlu
Top achievements
Rank 1
Venkateswarlu asked on 19 Nov 2013, 04:38 PM

    Hi sir,

       Please give  me the Response to my Request.

      i am attaching Three ScreenShots Regarding my issue:
    
     (1). The 1st one is i have filled the form with all required details,
 
    (2).   The 2nd Screenshot showing after Clicking Save button ,Validation Summary Popup raised if i did not give the required field details
   
             now  Signature image did not erased from RadAsyncupload control after firing Validation summary popup.

    (3).   The 3rd Screenshot showing Signature image Erased from RadAsyncupload control after firing Popup, for this popup i used RadWindowManager control for displying text from server side Code.
 
    Issue is: Signature image is Disappear(Erased) from control in 3rd screenshot scenario, after firing below text popup.

   Like Below:  RadWindowManager1.RadAlert("Given check number has already generated, preferable number would be: #" + ++maxCheckNo, 340, 140, "Check SetUp", null);

            
                 

               

6 Answers, 1 is accepted

Sort by
0
Shinu
Top achievements
Rank 2
answered on 20 Nov 2013, 04:50 AM
Hi Venkateswarlu,

Please try to set the PostbackTriggers property of the RadAsyncUpload. PostbackTriggers property is used for persist the information of the successfully uploaded file after the postback. Using this property the information about successfully uploaded files will be persisted after every postback until an exact control triggers a postback. When a postback is triggered from a control which ID is given in the postbackTriggers property all the information of  the uploaded files will become available on the server side and the RadAsyncUpload control will stop persisting the uploaded files information. Please have a look into the sample code I tried.

ASPX:
<asp:Label ID="Label1" runat="server" Text="Signature">
</asp:Label>
<telerik:RadAsyncUpload ID="RadAsyncUpload1" runat="server" PostbackTriggers="RadButton2">
</telerik:RadAsyncUpload>
</asp:Panel>
<telerik:RadButton ID="RadButton1" runat="server" Text="Save" OnClick="RadButton1_Click">
</telerik:RadButton>
<telerik:RadButton ID="RadButton2" runat="server" Text="Cancel">
</telerik:RadButton>
<telerik:RadWindowManager ID="RadWindowManager1" runat="server">
</telerik:RadWindowManager>

C#:
protected void RadButton1_Click(object sender, EventArgs e)
{
    RadWindowManager1.RadAlert("Fired", 340, 140, "CheckSetUp", null);
}

Thanks,
Shinu.
0
Venkateswarlu
Top achievements
Rank 1
answered on 20 Nov 2013, 08:29 AM
 
   Hi Shinu Sir,

     Thank you for your Response,
 
       Already i have used PostbackTriggers property for RadAsyncUpload control in my ASPX page it is working after firing Validation Summary popup also like in my  2nd attached Screenshot ,
--->after filing proper details if i click the save button with signature image also  successfully saved.

--->but in 3rd Scenario not working properly signature image is Erasing after firing like in i attached 3rd screenshot.

 ---> This Popup is firing after Executing Server side Code the Code Snippet is like this:


ASPX:
 
   <telerik:RadAsyncUpload runat="server" ID="RauImgImagesFt" AllowedFileExtensions=".jpg,.jpeg,.png,.gif"
     Localization-Select="..." MaxFileInputsCount="1" Skin="Outlook" Width="300px" CssClass="ruBrowse" PostbackTriggers="btnUpdate" />

  <telerik:RadButton CssClass="ButtonSave" ID="btnUpdate" Text="Save" ValidationGroup="g1"
     Width="70" runat="server" CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>'>
     <Icon PrimaryIconCssClass="rbSave" PrimaryIconLeft="4" PrimaryIconTop="4"></Icon>
 </telerik:RadButton>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
C# Code:
------------

protected void RadGrid1_InsertCommand(object sender, GridCommandEventArgs e)
    {
        mlocal_ds = new DataSet();
        oCheck.FedTaxID = Session["FedTaxID"].ToString();
        oCheck.ServiceID = Session["ServiceID"].ToString();

        GridEditFormItem item = e.Item as GridEditFormItem;
        RadComboBox RcbCheckPosition2 = (RadComboBox)item.FindControl("RcbFtCheckPosition");
        RadMaskedTextBox rdtxtFractionCode = (RadMaskedTextBox)item.FindControl("RcbFtFractionCode");
        RadComboBox rdcmbchkFormat = (RadComboBox)item.FindControl("rcbFtCheckFormat");
        RadAsyncUpload ImgImages = (RadAsyncUpload)item.FindControl("RauImgImagesFt") as RadAsyncUpload;
        RadTextBox rdtxtVoidAfter = (RadTextBox)item.FindControl("rdFttxtVoidAfter");
        RadTextBox rdtxtchkNumber1 = (RadTextBox)item.FindControl("rdFttxtchkNumber");
        RadTextBox rdtxtEFTNumber = (RadTextBox)item.FindControl("rdFttxtEFTNumber");
        RadTextBox rdtxtComments = (RadTextBox)item.FindControl("rdFttxtComments");


        iChkPosition = RcbCheckPosition2.Text;
        iChkFormat = rdcmbchkFormat.Text;
        IfractionCode = rdtxtFractionCode.Text;
        ivoidAfter = Convert.ToInt32(rdtxtVoidAfter.Text);
        ichkNo = Convert.ToInt32(rdtxtchkNumber1.Text);
        iEFTNo = Convert.ToInt32(rdtxtEFTNumber.Text);
        icomment = rdtxtComments.Text;

        string local_strStoreProName = "GetCompanyLevelCheckNumbers_AfterClosingPayroll";
        //oCheck.GetCompanylevelCheckNo(out mlocal_ds, local_strStoreProName);
        oCheck.GetCompanylevelCheckNo(out mlocal_ds, local_strStoreProName);


        //int maxCheckNo = mlocal_ds.Tables[0].AsEnumerable()
        //     .Max(r => r.Field<int>("chkNumber"));
        if (mlocal_ds != null)
        {
            for (int i = 0; i < mlocal_ds.Tables[0].Rows.Count; i++)
            {
                if (mlocal_ds.Tables[0].Rows[i]["chkNumber"].ToString() == ichkNo.ToString()) // oCustDetail.ServiceID &&          ds_local.Tables[0].Rows[i]["FedTaxID"].ToString() == oCustDetail.FedTaxID)
                {
                    int maxCheckNo = mlocal_ds.Tables[0].AsEnumerable()
      .Max(r => r.Field<int>("chkNumber"));
                    //int s = 1;

                    //int Prefered = s + maxCheckNo;
                    RadWindowManager1.RadAlert("Given check number has already generated, prefer number would be: #" + ++maxCheckNo, 340, 140, "Check SetUp", null);
                    chk = 1;
                    return;
                }
            }
        }
}



0
Shinu
Top achievements
Rank 2
answered on 21 Nov 2013, 06:43 AM
Hi Venkateswarlu,

As a work around try to set the PostbackTriggers property of RadAsyncUpload to 'btnCancel '. Please have a look into the following code snippet which works fine at my end.

ASPX:
<telerik:RadAsyncUpload runat="server" ID="RauImgImagesFt" AllowedFileExtensions=".jpg,.jpeg,.png,.gif"
    Localization-Select="..." MaxFileInputsCount="1" Skin="Outlook" Width="300px"
    CssClass="ruBrowse" PostbackTriggers="btnCancel" />
<telerik:RadButton CssClass="ButtonSave" ID="btnUpdate" Text="Save" ValidationGroup="g1"
    Width="70" runat="server" CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>'>
    <Icon PrimaryIconCssClass="rbSave" PrimaryIconLeft="4" PrimaryIconTop="4"></Icon>
</telerik:RadButton>
<telerik:RadButton ID="btnCancel" Text="Cancel" runat="server" CommandName="Cancel">
</telerik:RadButton>
 
Hope this will helps you.
Thanks,
Shinu.
0
Venkateswarlu
Top achievements
Rank 1
answered on 23 Nov 2013, 10:12 AM
     Hi Shinu sir,
    
      Thank you for your response,

    (1). You had given response scenario is working properly  in all scenarious when all Controls are out side of the RadGrid
    (2). if i use this scenaio in RadGrid one scenario working properly the scenaio is
                     (a). after filling the all controls in RadGrid if click the Save Button successfully Added after showing the first screenshot popup, the Code Snippet is like this.
                               in this scenario working properly. Like 1st attached screenshot.

                                  <telerik:RadAsyncUpload runat="server" ID="RauImgImagesFt" AllowedFileExtensions=".jpg,.jpeg,.png,.gif"
                                                                                        Localization-Select="..." MaxFileInputsCount="1" Skin="Outlook" Width="300px"
                                  CssClass="ruBrowse" PostbackTriggers="btnUpdate" />

                                
                                 <telerik:RadButton CssClass="ButtonSave" ID="btnUpdate" Text="Save" ValidationGroup="g1"
                                                            Width="70" runat="server" CommandName='<%# (Container is GridEditFormInsertItem) ?  "PerformInsert" : "Update" %>'>
                                                  <Icon PrimaryIconCssClass="rbSave" PrimaryIconLeft="4" PrimaryIconTop="4"></Icon>
                                                        </telerik:RadButton>

                       (b). in This Scenaio not working properly if i click the Save button i need to show one pop like 2nd attached screenshot.
                                   in this scenario Erasing the Signature image from control. the Code snippet is like this in RadGrid.
                                    
  <telerik:RadAsyncUpload runat="server" ID="RauImgImagesFt" AllowedFileExtensions=".jpg,.jpeg,.png,.gif"
                                                                                        Localization-Select="..." MaxFileInputsCount="1" Skin="Outlook" Width="300px"
                                                                                        CssClass="ruBrowse" PostbackTriggers="btnCancel" />

    <telerik:RadButton CssClass="ButtonCancel" ID="btnCancel" Text="Cancel" runat="server"
                                                            Class="ButtonSave" Width="70" CommandName="Cancel">
                                                            <Icon PrimaryIconCssClass="rbCancel" PrimaryIconLeft="6" PrimaryIconTop="4"></Icon>
                                                        </telerik:RadButton>
===========================================================================================================
                   
The Total functionality is like this:
ASPX design is like (b) code snippet in RadGrid.

C# Code:
 protected void RadGrid1_InsertCommand(object sender, GridCommandEventArgs e)
    {
        GridEditFormItem item = e.Item as GridEditFormItem;
        RadComboBox RcbCheckPosition2 = (RadComboBox)item.FindControl("RcbFtCheckPosition");
        RadMaskedTextBox rdtxtFractionCode = (RadMaskedTextBox)item.FindControl("RcbFtFractionCode");
        RadComboBox rdcmbchkFormat = (RadComboBox)item.FindControl("rcbFtCheckFormat");
        RadAsyncUpload ImgImages = (RadAsyncUpload)item.FindControl("RauImgImagesFt") as RadAsyncUpload;
        RadTextBox rdtxtVoidAfter = (RadTextBox)item.FindControl("rdFttxtVoidAfter");
        RadTextBox rdtxtchkNumber1 = (RadTextBox)item.FindControl("rdFttxtchkNumber");
        RadTextBox rdtxtEFTNumber = (RadTextBox)item.FindControl("rdFttxtEFTNumber");
        RadTextBox rdtxtComments = (RadTextBox)item.FindControl("rdFttxtComments");

        //oCheck.FedTaxID = Session["FedTaxID"].ToString();
        oCheck.ServiceID = Session["ServiceID"].ToString();
        iChkPosition = RcbCheckPosition2.Text;
        iChkFormat = rdcmbchkFormat.Text;
        IfractionCode = rdtxtFractionCode.Text;
        ivoidAfter = Convert.ToInt32(rdtxtVoidAfter.Text);
        ichkNo = Convert.ToInt32(rdtxtchkNumber1.Text);
        iEFTNo = Convert.ToInt32(rdtxtEFTNumber.Text);
        icomment = rdtxtComments.Text;

        string local_strStoreProName = "GetSBLevelCheckNumbers_AfterClosingPayroll";
        //oCheck.GetCompanylevelCheckNo(out mlocal_ds, local_strStoreProName);
        oCheck.GetSBlevelCheckNo(out mlocal_ds, local_strStoreProName);


        //int maxCheckNo = mlocal_ds.Tables[0].AsEnumerable()
        //     .Max(r => r.Field<int>("chkNumber"));
        if (mlocal_ds != null)
        {
            for (int i = 0; i < mlocal_ds.Tables[0].Rows.Count; i++)
            {
                if (mlocal_ds.Tables[0].Rows[i]["chkNumber"].ToString() == ichkNo.ToString()) // oCustDetail.ServiceID && ds_local.Tables[0].Rows[i]["FedTaxID"].ToString() == oCustDetail.FedTaxID)
                {
                    int maxCheckNo = mlocal_ds.Tables[0].AsEnumerable()
      .Max(r => r.Field<int>("chkNumber"));
                    //int s = 1;

                    //int Prefered = s + maxCheckNo;
                    RadWindowManager1.RadAlert("Given check number has already generated, preferable number would be: #" + ++maxCheckNo, 340, 140, "Check SetUp", null);
                    chk = 1;
                    return;
                }
            }
        }



        byte[] fileData;
        if (ImgImages.UploadedFiles.Count > 0)
        {
            UploadedFile file = ImgImages.UploadedFiles[0];
            string ImgFileName1 = file.FileName;
            //RadBinaryImage RadBi = new RadBinaryImage();
            System.Drawing.Image myImage = System.Drawing.Image.FromStream(file.InputStream);

            // Compute thumbnail size.
            Size thumbnailSize = GetThumbnailSize(myImage);
            // Get thumbnail.
            System.Drawing.Image thumbnail = myImage.GetThumbnailImage(thumbnailSize.Width, thumbnailSize.Height, null, IntPtr.Zero);

            // Save thumbnail.

            //if (myImage.Width > 180 && myImage.Height > 35)
            //{
            //    RadWindowManager1.RadAlert("Signature width and height not grater than  200x35 pixels", 300, 60, "Signature", null);
            //    chk = 1;
            //    return;
            //}

            Bitmap bmp = new Bitmap(myImage);
            //Bitmap bmpConverted = ConvertImage(bmp, ImageFormat.Gif) as Bitmap;
            bool myImagePngflag = myImage.RawFormat.Equals(ImageFormat.Png);
            if (myImagePngflag)
            {
                //Bitmap bm = ApplyContrast(50.0, bmp);
                fileData = imageToByteArray1(thumbnail);
            }
            else
            {
                fileData = imageToByteArray(thumbnail);
            }
            //if (myImageBmpflag)
            //{
            //    RadWindowManager1.RadAlert("Image Not IN .Jpeg or .Gif format", 300, 60, "Check Signature", null);
            //    chk = 1;
            //    return;
            //}
            if (fileData.Length > 1048576)
            {
                RadWindowManager1.RadAlert("The length of the uploaded file must be less than 1 MB", 300, 100, "Check SetUp Signature", null);
                return;
            }
            //string ImgFileName = ImgImages.UploadedFiles[0].FileName;
            oCheck.ImgFileName = ImgFileName1;
            oCheck.Signature = fileData;
        }
        else
        {
            RadWindowManager1.RadAlert("You Must Select Signature Image", 300, 100, "Check Setup", null);
            chk = 1;
            if (e.Item is GridEditableItem && e.Item.IsInEditMode)
            {
                RadComboBox RcbCheckPositio = (RadComboBox)item.FindControl("RcbFtCheckPosition");
                RadMaskedTextBox rdtxtFractionCo = (RadMaskedTextBox)item.FindControl("RcbFtFractionCode");
                RadComboBox rdcmbchkForm = (RadComboBox)item.FindControl("rcbFtCheckFormat");
                //RadAsyncUpload ImgImages = (RadAsyncUpload)item.FindControl("RauImgImagesFt") as RadAsyncUpload;
                RadTextBox rdtxtVoidAft = (RadTextBox)item.FindControl("rdFttxtVoidAfter");
                RadTextBox rdtxtchkNumbe = (RadTextBox)item.FindControl("rdFttxtchkNumber");
                RadTextBox rdtxtEFTNumb = (RadTextBox)item.FindControl("rdFttxtEFTNumber");
                RadTextBox rdtxtCommen = (RadTextBox)item.FindControl("rdFttxtComments");

                string s = iChkPosition;
                RcbCheckPositio.SelectedValue = iChkPosition;
                rdtxtFractionCo.Text = IfractionCode;
                rdcmbchkForm.Text = iChkFormat;
                rdtxtVoidAft.Text = ivoidAfter.ToString();
                rdtxtchkNumbe.Text = ivoidAfter.ToString();
                rdtxtEFTNumb.Text = iEFTNo.ToString();
                rdtxtCommen.Text = icomment;
            }
            return;
        }
        oCheck.voidAfter = Convert.ToInt16(rdtxtVoidAfter.Text);
        oCheck.CheckFormat = rdcmbchkFormat.SelectedValue.ToString();
        string chkno = rdtxtchkNumber1.Text;
        chkno = chkno.PadLeft(4, (char)48);
        oCheck.chkNumber = Convert.ToInt16(chkno);
        oCheck.Comments = rdtxtComments.Text;
        oCheck.EFTNumber = rdtxtEFTNumber.Text;
        oCheck.FractionCode = rdtxtFractionCode.Text;
        oCheck.CheckType = RcbCheckPosition2.SelectedItem.Text;

        if (oCheck.chkNumber != 0)
        {
            if (oCheck.InsertTaxFormsSBCheckSetUpDetails())
            {
                pCount = 0;
                RadWindowManager1.RadAlert("Inserted Checksetup details successfully.", 300, 110, "Checksetup details", null);
                //RadGrid grid = sender as RadGrid;
                //grid.Rebind();
                //e.Canceled = true;
            }
        }
        else
        {
            RadWindowManager1.RadAlert("Check number does not allow 0.", 300, 110, "Checksetup details", null);
            chk = 1;
        }
    }
0
Shinu
Top achievements
Rank 2
answered on 25 Nov 2013, 05:09 AM
Hi Venkateswarlu,

Unfortunately I couldn't replicate the issue at my end. Please have a look into the full code I tried which works fine at my end.

ASPX:
<telerik:RadWindowManager ID="RadWindowManager1" runat="server">
</telerik:RadWindowManager>
<telerik:RadGrid ID="RadGrid1" runat="server" DataSourceID="SqlDataSource1" OnInsertCommand="RadGrid1_InsertCommand"
    AllowAutomaticInserts="true">
    <MasterTableView CommandItemDisplay="Top">
        <EditFormSettings EditFormType="Template">
            <FormTemplate>
                <telerik:RadComboBox ID="RcbFtCheckPosition" runat="server">
                    <Items>
                        <telerik:RadComboBoxItem Text="Item1" runat="server" />
                        <telerik:RadComboBoxItem Text="Item2" runat="server"/>
                    </Items>
                </telerik:RadComboBox>
                <telerik:RadMaskedTextBox ID="RcbFtFractionCode" runat="server" Mask="####">
                </telerik:RadMaskedTextBox>
                <telerik:RadComboBox ID="rcbFtCheckFormat" runat="server">
                    <Items>
                        <telerik:RadComboBoxItem Text="Item a" runat="server" />
                        <telerik:RadComboBoxItem Text="Item b" runat="server"/>
                    </Items>
                </telerik:RadComboBox>
                <telerik:RadAsyncUpload runat="server" ID="RauImgImagesFt" AllowedFileExtensions=".jpg,.jpeg,.png,.gif"
                    Localization-Select="..." MaxFileInputsCount="1" Skin="Outlook" Width="300px"
                    CssClass="ruBrowse" PostbackTriggers="btnCancel" />
                <telerik:RadTextBox ID="rdFttxtVoidAfter" runat="server">
                </telerik:RadTextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="rdFttxtVoidAfter"
                    ErrorMessage="*" runat="server">
                </asp:RequiredFieldValidator>
                <telerik:RadTextBox ID="rdFttxtchkNumber" runat="server">
                </telerik:RadTextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="rdFttxtchkNumber"
                    ErrorMessage="*" runat="server">
                </asp:RequiredFieldValidator>
                <telerik:RadTextBox ID="rdFttxtEFTNumber" runat="server">
                </telerik:RadTextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" ControlToValidate="rdFttxtEFTNumber"
                    ErrorMessage="*" runat="server">
                </asp:RequiredFieldValidator>
                <telerik:RadTextBox ID="rdFttxtComments" runat="server">
                </telerik:RadTextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator4" ControlToValidate="rdFttxtComments"
                    ErrorMessage="*" runat="server">
                </asp:RequiredFieldValidator>
                <telerik:RadButton CssClass="ButtonSave" ID="btnUpdate" Text="Save" ValidationGroup="g1"
                    Width="70" runat="server" CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>'>
                    <Icon PrimaryIconCssClass="rbSave" PrimaryIconLeft="4" PrimaryIconTop="4"></Icon>
                </telerik:RadButton>
                <telerik:RadButton ID="btnCancel" Text="Cancel" runat="server" CommandName="Cancel">
                </telerik:RadButton>
            </FormTemplate>
        </EditFormSettings>
        <Columns>
            <telerik:GridBoundColumn HeaderText="OrderID" DataField="OrderID" UniqueName="OrderID">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn HeaderText="CustomerID" DataField="CustomerID" UniqueName="CustomerID">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn HeaderText="EmployeeID" DataField="EmployeeID" UniqueName="EmployeeID">
            </telerik:GridBoundColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
    SelectCommand="SELECT top 10 [OrderID], [CustomerID], [EmployeeID] FROM [Orders]">
</asp:SqlDataSource>

C#:
protected void RadGrid1_InsertCommand(object sender, GridCommandEventArgs e)
{
    GridEditFormItem item = e.Item as GridEditFormItem;
    RadComboBox RcbCheckPosition2 = (RadComboBox)item.FindControl("RcbFtCheckPosition");
    RadMaskedTextBox rdtxtFractionCode = (RadMaskedTextBox)item.FindControl("RcbFtFractionCode");
    RadComboBox rdcmbchkFormat = (RadComboBox)item.FindControl("rcbFtCheckFormat");
    RadAsyncUpload ImgImages = (RadAsyncUpload)item.FindControl("RauImgImagesFt");
    RadTextBox rdtxtVoidAfter = (RadTextBox)item.FindControl("rdFttxtVoidAfter");
    RadTextBox rdtxtchkNumber1 = (RadTextBox)item.FindControl("rdFttxtchkNumber");
    RadTextBox rdtxtEFTNumber = (RadTextBox)item.FindControl("rdFttxtEFTNumber");
    RadTextBox rdtxtComments = (RadTextBox)item.FindControl("rdFttxtComments");
 
    string iChkPosition = RcbCheckPosition2.Text;
    string iChkFormat = rdcmbchkFormat.Text;
    string IfractionCode = rdtxtFractionCode.Text;
    int ivoidAfter = Convert.ToInt32(rdtxtVoidAfter.Text);
    int ichkNo = Convert.ToInt32(rdtxtchkNumber1.Text);
    int iEFTNo = Convert.ToInt32(rdtxtEFTNumber.Text);
    string icomment = rdtxtComments.Text;
 
    int maxCheckNo = 0;
    RadWindowManager1.RadAlert("Given check number has already generated, prefer number would be: #" + ++maxCheckNo, 340, 140, "CheckSetUp", null);
}

Thanks,
Shinu.
0
Venkateswarlu
Top achievements
Rank 1
answered on 25 Nov 2013, 09:31 AM
  
  Hi Shinu Sir,
         
         Thank you for your response, in my end Three scenaious is there Two scenaious are working properly, but third scenario not working, for this may be have to change my code i will work on this, Once again Thanq for u r Response sir.
Tags
General Discussions
Asked by
Venkateswarlu
Top achievements
Rank 1
Answers by
Shinu
Top achievements
Rank 2
Venkateswarlu
Top achievements
Rank 1
Share this question
or