Details View Updating using custom Edit and Update buttons

Hi

While working with DetailsView control I have come up with few resources when you want to perform update to the data within DetailsView using buttons out side of DetailsView control.

Here is the source code to update all the columns in DetailsView with edited data. Note that regard less of old values and new values database is updated with all the data in DetailsView(edited columns and non-edited columns).

//ASPX
 

<form id="form1" runat="server"> 
<div> 
    <asp:Button ID="btnEdit" runat="server" Text="Edit" onclick="btnEdit_Click" /> 
    <asp:Button ID="btnUpdate" runat="server" Text="Update" onclick="btnUpdate_Click" /> 
    <asp:Button ID="btnCancel" runat="server" Text="Cancel" onclick="btnCancel_Click" />
        <br /><br />

        <asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px"
             AutoGenerateRows="false" DataKeyNames="CustomerId"
            onitemupdating="DetailsView1_ItemUpdating">
             <Fields>
                <asp:BoundField HeaderText="ID" DataField="CustomerId" />
                <asp:BoundField HeaderText="Name" DataField="CustomerName" />
                <asp:BoundField HeaderText="Deaprtment" DataField="Department" />
                <asp:BoundField HeaderText="Address" DataField="address" />
                <asp:BoundField HeaderText="Married" DataField="Married" />
                <asp:BoundField HeaderText="Nationality" DataField="Nationality" />
             </Fields>
        </asp:DetailsView> 
</div>
    </form>

//code behind c#
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class View : System.Web.UI.Page
{
    public string conString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    protected void Page_Load(object sender, EventArgs e)
    {
            //Check if the page is the result of PostBack
            if((!IsPostBack)
             {
               //Bind data 
               DetailsView1.DataSource = GetUser();
               DetailsView1.DataBind();
             }

    }
    /// <summary>
    /// Get data
    /// </summary>
    /// <returns>DataTable with Customers data</returns>
    private DataTable GetUser()
    {
        string custId = Request.QueryString["id"].ToString();

        SqlConnection con = new SqlConnection(conString);
        SqlCommand cmd = new SqlCommand("Select * From customer Where CustomerId= '" + custId + "' ", con);

        cmd.CommandType = CommandType.Text;

        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        DataTable CustomerTable = new DataTable();
        adapter.Fill(CustomerTable);

        return CustomerTable;

    }
    /// <summary>
    /// Edit button click
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnEdit_Click(object sender, EventArgs e)
    {
        DetailsView1.ChangeMode(DetailsViewMode.Edit);
        //Bind the DetailsView with data
        DetailsView1.DataSource = GetUser();
        DetailsView1.Databind();
    }
    /// <summary>
    /// Cancel button click
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
        //Change 3: Bind the DetailsView with custom method (i.e., GetUser())
        DetailsView1.DataSource = GetUser();
        DetailsView1.Databind();
    }
    /// <summary>
    /// Update button click event
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnUpdate_Click(object sender, EventArgs e)
    {
        //http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.updateitem.aspx
        DetailsView1.UpdateItem(true);
    }
/// <summary>
/// DetailsView updating event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
    {
         if(DetailsView1.CurrentMode == DetailsViewMode.Edit)
        {

        //Get DetailsView columns
        TextBox txtUserName = DetailsView1.Rows[3].Cells[1].Controls[0] as TextBox;
        //Note that you need FindControl for TemplateFields in DetailsView
        TextBox txtUserID = DetailsView1.FindControl("txtUserID");

        SqlConnection con = new SqlConnection((conString));
        using (SqlCommand cmd = new SqlCommand("spUpdateUserRecord", Con))
         {
                    //Specify the command type
                    cmd.CommandType = CommandType.StoredProcedure;
                    //Pass parameters
                    cmd.Parameters.AddWithValue("@UserName", txtUserName.Text.Trim());
                    cmd.Parameters.AddWithValue("@UserID", txtUserID.Text.Trim());
                    con.Open();
                    cmd.ExecuteNonQuery();
        }

        DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
        //Change 4: Bind the DetailsView with custom method (i.e., GetUser())       
        DetailsView1.DataSource = GetUser();
        DetailsView1.Databind();
    }//end of if
      }//end of Event
}

References

4 Comments

  • Hi sukumarraju,

    I was update the detail view at code behind but i didn't use store procedure and my query was at code behind also, can you show me how to update the control in detail view

  • Hi Ja,
    Your SQL will change. Instead of using Stored procedure you use direct SQL statements in your code behind.
    Provide your source code, so that further help can be provided.

  • Hi Dev sharma

    I do not think that there is an easy way of coding to achieve this when you use custom buttons out of DetailsView control.
    References i gave below the article does help you to look for the relevant source code and customise to meet your requirements or do let me know what you are trying to achieve.
    So that further help can be provided.

  • Thank you for this nice example

Comments have been disabled for this content.