Friday 11 May 2012

Example: How to implement the multi-edit functionality with a multi-page grid that is bound dynamically

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="DevExpress.Web.v10.2" Namespace="DevExpress.Web.ASPxHiddenField"
    TagPrefix="dxhf" %>
<%@ register Assembly="DevExpress.Web.ASPxGridView.v10.2" Namespace="DevExpress.Web.ASPxGridView"
    TagPrefix="dxwgv" %>
<%@ register Assembly="DevExpress.Web.ASPxEditors.v10.2" Namespace="DevExpress.Web.ASPxEditors"
    TagPrefix="dxe" %>

<!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 id="Head1" runat="server">
    <title></title>
      <script type="text/javascript">
        function ProcessValueChanged(key,animalName,colourID) 
        {
     
            var currentKey = "key" + key.toString();

            
            if (!clientHiddenField.Contains(currentKey)) 
            {

                clientHiddenField.Add(currentKey, animalName+";"+colourID);
            }
           
            
            else 
            {
                clientHiddenField.Set(currentKey, animalName + ";" + colourID);
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
     <dxwgv:aspxgridview ID="ASPxGridView1" runat="server"  KeyFieldName="ID" AutoGenerateColumns="False"
        SettingsBehavior-AllowDragDrop="False"  ClientInstanceName="clientGridView">
                <Columns>

                  <dxwgv:GridViewDataTextColumn FieldName="ID" VisibleIndex="0" Width="15px">
                  </dxwgv:GridViewDataTextColumn>

                  <dxwgv:GridViewDataTextColumn FieldName="Animal" VisibleIndex="1">

                    <DataItemTemplate> 
                       <dxe:ASPxTextBox ID="tbWbsLevel" runat="server"  Text='<%#Bind("Animal")%>' Size="6"
OnDataBound="tbWbsLevel_Load" >
                       </dxe:ASPxTextBox> 
                   </DataItemTemplate> 

                </dxwgv:GridViewDataTextColumn>

               <dxwgv:GridViewDataTextColumn FieldName="ColourID" Caption="Colour" VisibleIndex="2" >
                   <dataitemtemplate>
                     <dxe:aspxcombobox ID="colourBox" runat="server" Value='<%#Bind("ColourID") %>'
OnDataBound="colourBox_Load">
                       <items>
                         <dxe:listedititem Text="Red" Value="1" />
                         <dxe:listedititem Text="Gray" Value="2" />
                         <dxe:listedititem Text="Brown" Value="3" />
                         <dxe:listedititem Text="Black" Value="4" />
                       </items>
                     </dxe:aspxcombobox>
                   </dataitemtemplate>
               </dxwgv:GridViewDataTextColumn>
</Columns>

           <settingsbehavior AllowDragDrop="False" />
           <settingspager PageSize="5">
           </settingspager>

          </dxwgv:aspxgridview>
          
    <dxhf:aspxhiddenfield runat="server" ID="hiddenField" 
            ClientInstanceName="clientHiddenField">
    </dxhf:aspxhiddenfield>
        <br />
        <dxe:aspxbutton ID="btnUpdate" runat="server" Text="Update" 
            OnClick="btnUpdate_Click">
        </dxe:aspxbutton>
    </form>
</body>
</html>



C#........................................................................................

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DevExpress.Web.ASPxGridView;
using DevExpress.Web.ASPxEditors;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
    private DataTable Data
    {
        get
        {
            DataTable data = (DataTable)Session["Data"];
            if (data == null)
            {
                data = new DataTable();
                data.Columns.Add("ID");
                data.Columns.Add("Animal");
                data.Columns.Add("ColourID");
                data.Rows.Add(new object[] { 1, "Fox", 1 });
                data.Rows.Add(new object[] { 2, "Wolf", 2 });
                data.Rows.Add(new object[] { 3, "Bear", 3 });
                data.Rows.Add(new object[] { 4, "Panther", 4 });
                data.Rows.Add(new object[] { 5, "Rat", 2 });
                data.Rows.Add(new object[] { 6, "Cat", 4 });
                Session["Data"] = data;
            }
            return data;
        }
    }

    protected void Page_Init(object sender, EventArgs e)
    {
        ASPxGridView1.DataSource = Data;
        ASPxGridView1.DataBind();
    }
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void btnUpdate_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < Data.Rows.Count; i++)
        {
            string hfKey = "key" + Data.Rows[i]["ID"].ToString();
            if (hiddenField.Contains(hfKey))
            {
                string[] pars = Convert.ToString(hiddenField[hfKey]).Split(';');
                Data.Rows[i]["Animal"] = pars[0];
                Data.Rows[i]["ColourID"] = pars[1];


            }


        }
        ASPxGridView1.DataBind();
        hiddenField.Clear();
    }
    protected void tbWbsLevel_Load(object sender, EventArgs e)
    {
        GridViewDataItemTemplateContainer c = ((ASPxTextBox)sender).NamingContainer
            as GridViewDataItemTemplateContainer;
        ((ASPxTextBox)sender).ClientInstanceName = "animalName" + c.KeyValue.ToString();
        ((ASPxTextBox)sender).ClientSideEvents.TextChanged = "function(s,e){ProcessValueChanged(" +
c.KeyValue.ToString() + ",s.GetText(),animalColour" + c.KeyValue.ToString() + ".GetValue());}";

        string hfKey = "key" + c.KeyValue.ToString();
        if (hiddenField.Contains(hfKey))
        {
            string[] pars = Convert.ToString(hiddenField[hfKey]).Split(';');
            ((ASPxTextBox)sender).Text = pars[0];


        }

    }

    protected void colourBox_Load(object sender, EventArgs e)
    {
        GridViewDataItemTemplateContainer c = ((ASPxComboBox)sender).NamingContainer
         as GridViewDataItemTemplateContainer;
        ((ASPxComboBox)sender).ClientInstanceName = "animalColour" + c.KeyValue.ToString();
        ((ASPxComboBox)sender).ClientSideEvents.SelectedIndexChanged = "function(s,e){ProcessValueChanged(" +
c.KeyValue.ToString() + ",animalName" + c.KeyValue.ToString() + ".GetText(),s.GetValue().toString());}";
        string hfKey = "key" + c.KeyValue.ToString();
        if (hiddenField.Contains(hfKey))
        {
            string[] pars = Convert.ToString(hiddenField[hfKey]).Split(';');
            ((ASPxComboBox)sender).Value = pars[1];


        }
    }
}

Thursday 10 May 2012

How to access ASPxGridView inside DetailRow...............


How to access ASPxGridView inside DetailRow...............

 for (int i = 0; i < AssetListGrid.VisibleRowCount; i++)
  {
    if (AssetListGrid.Selection.IsRowSelected(i))
      {
    ASPxGridView IGV = AssetListGrid.FindDetailRowTemplateControl(i, "InnerGrid") as ASPxGridView;
          for (int j = 0; j < IGV.VisibleRowCount; j++)
                {
                                if (IGV.Selection.IsRowSelected(j))
                                {

                                      String DisplayDetailsID = IGV.GetRowValues(i, "DisplayDetailsID").ToString();
                                        //(ASPxTextBox)IGV.FindRowCellTemplateControl(j, IGV.Columns["DisplayDetailsID"] as GridViewDataColumn, "DisplayDetailsID");
                                    ASPxTextBox OfferPrice = (ASPxTextBox)IGV.FindRowCellTemplateControl(j, IGV.Columns["OfferPrice"] as GridViewDataColumn, "OfferPrice");
                                    myInsertQuery = "INSERT INTO dbo.OrderDisplayDetails([OrderConfirmationID],[DisplayDetailsID],[QuotationID],[QuotationPrice]) Values(@OrderConfirmationID,@DisplayDetailsID,@QuotationID,@QuotationPrice)";
                                    myCommand = new SqlCommand(myInsertQuery, myConnection);
                                    myCommand.Connection = myConnection;
                                    myCommand.Parameters.AddWithValue("@OrderConfirmationID", txtOrderConfirmationID.Text);
                                    myCommand.Parameters.AddWithValue("@DisplayDetailsID", DisplayDetailsID);
                                    myCommand.Parameters.AddWithValue("@QuotationID", comboQuotationID.SelectedItem.Value);
                                    myCommand.Parameters.AddWithValue("@QuotationPrice", OfferPrice.Text);
                                    myConnection.Open();
                                    myCommand.ExecuteNonQuery();
                                    myConnection.Close();
                                }
                            }
                        }
                    }

Example of OnHtmlRowCreated event in ASPxGridView


ASPxGridView Source Code

Here is ASPxGridView which  implements the OnHtmlRowCreated event.

<dx:ASPxGridView ID="gvUser" AutoGenerateColumns="False" runat="server" 
            OnHtmlRowCreated="gvUser_HtmlRowCreated">
            <Columns>
                <dx:GridViewCommandColumn ShowSelectCheckbox="True" VisibleIndex="0">
                </dx:GridViewCommandColumn>
                <dx:GridViewDataTextColumn FieldName="fldFirstName" VisibleIndex="1">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn FieldName="fldLastName" VisibleIndex="2">
                </dx:GridViewDataTextColumn>
                 <dx:GridViewDataTextColumn FieldName="fldMobileNo" VisibleIndex="3">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn FieldName="fldEmailAddress" VisibleIndex="4">
                </dx:GridViewDataTextColumn>
                 <dx:GridViewDataTextColumn FieldName="fldUserType" VisibleIndex="5">
                </dx:GridViewDataTextColumn>
            </Columns>
        </dx:ASPxGridView>

Here is a method called gvUser_HtmlRowCreated which add a image Icon to the custom cloumn (ASPxImage )which I added in my previous post.

Protected void gvUser_HtmlRowCreated(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewTableRowEventArgs e)
        {
            try
            {

                // image binding
                ASPxImage image = gvUser.FindRowCellTemplateControl(e.VisibleIndex, gvUser.Columns["UserIcom"] as GridViewDataColumn, "ASPxImage1") as ASPxImage;
                if (image == null) return;
                image.Visible = true;

                if (int.Parse(e.GetValue("fldUserType").ToString()) == 1)
                {
                    image.ImageUrl = "~/Images/red.png";
                    image.ToolTip = "CRP user";
                }
                else
                {
                    if (int.Parse(e.GetValue("fldUserType").ToString()) == 2)
                    {
                        image.ImageUrl = "~/Images/yellow.png";
                        image.ToolTip = "BCS user";
                    }
                    else
                    {
                        image.ImageUrl = "~/Images/green.png";
                        image.ToolTip = "NM User";
                    }
                }
            }
            catch { }

        }

    }

Monday 7 May 2012

How to add a ASPxImage control in ASPxGridView run time?

ASPxGridView

<dx:ASPxGridView ID="gvUser" AutoGenerateColumns="False" runat="server"  OnDataBound="gvUser_DataBound" 
            OnHtmlRowCreated="gvUser_HtmlRowCreated">
            <Columns>
                <dx:GridViewCommandColumn ShowSelectCheckbox="True" VisibleIndex="0">
                </dx:GridViewCommandColumn>
                <dx:GridViewDataTextColumn FieldName="fldFirstName" VisibleIndex="1">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn FieldName="fldLastName" VisibleIndex="2">
                </dx:GridViewDataTextColumn>
                 <dx:GridViewDataTextColumn FieldName="fldMobileNo" VisibleIndex="3">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn FieldName="fldEmailAddress" VisibleIndex="4">
                </dx:GridViewDataTextColumn>
                 <dx:GridViewDataTextColumn FieldName="fldUserType" VisibleIndex="5">
                </dx:GridViewDataTextColumn>
            </Columns>
        </dx:ASPxGridView>

Adding a ASPxImage Control to ASPxGridView

Here I create a class called MyImageTemplate  in c# which implements ITemplate interface and create an instance of ASPxImage control and add it to GridViewDataItemTemplateContainer.

 class MyImageTemplate : ITemplate
    {
        public string ID { get; set; }

        public void InstantiateIn(Control container)
        {
            img = new ASPxImage();
            gridContainer = (GridViewDataItemTemplateContainer)container;
            //img.ImageUrl = "~/Images/OK.gif";
            img.Visible = false;
            img.ID = ID;
            img.Width = 50;
            img.Height = 40;
            container.Controls.Add(img);
        }
    } 

OnDataBound Event Method

Here I implement the OnDataBound event in which adds  ASPxImage Control as custom calumn.

protected void gvUser_DataBound(object sender, EventArgs e)
        {
            GridViewDataColumn col1 = new GridViewDataColumn();
            col1.Caption = "User Icon";
            col1.FieldName = "UserIcom";
            col1.Width = 60;
            col1.VisibleIndex = 6;
            //visibleIndex++;
            col1.DataItemTemplate = new MyImageTemplate() { ID = "ASPxImage1" };
            gvUser.Columns.Add(col1);
        }

How to send a email in c# asp.net using gmail smtp server ?

frmSendEmail.aspx  file


<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/CRP/CRP.Master" AutoEventWireup="true" 
    CodeBehind="frmTest.aspx.cs" Inherits="Ihat_CSMRT.frmTest" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Content" runat="server">
  <div>


   <table width="90%">

      <tr><td width="50%" align="right">
       <asp:Label ID="lblEmailAddres" runat="server" Text="To:-"></asp:Label></td>
       <td> <asp:TextBox ID="txtTo" runat="server"></asp:TextBox></td></tr>
       <tr><td width="50%" align="right"><asp:Label ID="lblCcEmailAddress" runat="server"              Text="Cc:-"></asp:Label></td>
   <td><asp:TextBox ID="txtcc" runat="server"></asp:TextBox></td></tr>
   <tr><td width="50%" align="right"><asp:Label ID="lblSubject" runat="server" Text="Subject:-"></asp:Label></td>
       <td><asp:TextBox ID="txtSubject" runat="server"></asp:TextBox></td></tr>
       <tr><td width="50%" align="right"><asp:Label ID="lblContent" runat="server" Text="Message"></asp:Label></td>
       <td><asp:TextBox ID="txtContent" runat="server" TextMode="MultiLine" Height="100px"></asp:TextBox></td></tr>
       <tr><td width="50%" align="right">
       <asp:Button ID="btnSned" runat="server" Text="Send Email" Width="100px" OnClick="btnSned_Click"/></td>
       <td width="50%" align="left"> <asp:Button ID="btnClear" runat="server" Text="Clear" Width="100px" 
           OnClick="btnClear_Click" /></td></tr>
       <tr><td colspan="2"> <asp:Label ID="lblMsg" runat="server" Text="Label"></asp:Label></td></tr>
        </table>


    </div>

</asp:Content>
    
Design view:-













frmSendEmail.aspx.cs  file

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;

namespace Ihat_CSMRT
{
    public partial class frmTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // on page load code here
        }

        protected void btnSned_Click(object sender, EventArgs e)
        {
            if (txtTo.Text != string.Empty && txtcc.Text!=string.Empty && txtSubject.Text != string.Empty && txtContent.Text != string.Empty)
            {
                // call sendEmail method
                sendMail(txtTo.Text, txtcc.Text,txtSubject.Text, txtContent.Text);
            }
        }

        protected void btnClear_Click(object sender, EventArgs e)
        {
            txtTo.Text = "";
            txtcc.Text = "";
            txtSubject.Text = "";
            txtContent.Text = "";
        }
        public void sendMail(String ClientEmailID, string CcAddress, String subject, String body)
        {
            // create smtp clinet object
            SmtpClient client = new SmtpClient();
            MailMessage message = new MailMessage();
            client.Host = "smtp.gmail.com";
            client.Port = 25;
            MailAddress fromAddress = new MailAddress("rphbti640@gmail.com", "Rampal Singh");
            message.From = fromAddress;
            message.To.Add(ClientEmailID);
            message.Subject = subject;
            message.CC.Add(CcAddress);
            message.Bcc.Add(new MailAddress("rphbti640@gmail.com"));
            message.IsBodyHtml = false;
            message.Body = body;
            client.Credentials = new System.Net.NetworkCredential("rphbti640@gmail.com", "********");
            client.EnableSsl = true;
            try
            {
                client.Send(message);
                lblMsg.Text = "Mail has sent successfully.";

            }
            catch (System.Net.Mail.SmtpException ex)
            {
                lblMsg.Text = "Errors:" + ex;
            }

        }
   
    }

}