Articles in this section
Category / Section

How to load and save a Sql table in Spreadsheet

5 mins read

Description

This knowledge base explains how to load and save changes to a Sql table in Spreadsheet.

Solution

JavaScript

 

HTML

<input type="button" value="Save Changes to DB" id="saveChangesToDB" />
<div id="FlatSpreadsheet"></div>

 

JS

var dataSource;
$(function () {
    $.ajaxSetup({ async: false });            
    $.getJSON("api/Spreadsheet/GetDataFromDB", {}, function (data) {
        dataSource = data;
    });
    $.ajaxSetup({ async: true });
    $("#FlatSpreadsheet").ejSpreadsheet({
        columnWidth: 110,
        sheets: [
            {
                dataSource: dataSource,
                primaryKey: "OrderID"
            }
        ],
        loadComplete: "onLoadComplete"
    });
    $("#saveChangesToDB").on("click", function () {
        var ssObj = $("#FlatSpreadsheet").data("ejSpreadsheet"), key, rowIdx, sheetIdx = ssObj.getActiveSheetIndex(), editedChanges = ssObj.XLEdit.saveEditingValue().EditedData,
            dataSettings = ssObj.getDataSettings(sheetIdx)[0], isShowHeader = dataSettings.showHeader, dataSource = dataSettings.dataSource, changedDataSource = [], pushedRowColl = [];
        if (!editedChanges.length) {
            ssObj.alert("Please edit any cells and try again!");
            return;
        }
        ssObj.showWaitingPopUp();
        for (key in editedChanges) {
            rowIdx = editedChanges[key].CellIndex.RowIndex;
            if (isShowHeader)
                rowIdx--;
            if (pushedRowColl.indexOf(rowIdx) < 0) {
                changedDataSource.push(dataSource[rowIdx]);
                pushedRowColl.push(rowIdx);
            }
        }
        $.ajax({
            type: "POST",
            url: "api/Spreadsheet/SaveChangesToDatabase",
            data: { editedValues: JSON.stringify(changedDataSource) },
            success: function (response) {
                ssObj.alert(response);
                ssObj.hideWaitingPopUp();
            },
            error: function (err) {
                ssObj.alert(err.statusText);
                ssObj.hideWaitingPopUp();
            }
        });
    });
});
function onLoadComplete(args) {
    if (!this.isImport) {
        this.XLEdit.saveEditingValue(); //Get or reset the saved changes collection after data loaded
    }
}

 

WEBAPI

private static string connetionString = ConfigurationManager.ConnectionStrings["SpreadDBConnectionString"].ConnectionString;
[AcceptVerbs("Get")]
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare)]
public HttpResponseMessage GetDataFromDB()
{
    List<Order> orders = new List<Order>();
    SqlConnection sqlCon = new SqlConnection(connetionString);
    SqlCommand sqlComm = new SqlCommand("SELECT * FROM [dbo].[Table]", sqlCon);
    sqlCon.Open();
    SqlDataReader sqlDR = sqlComm.ExecuteReader();
    while (sqlDR.Read())
    {
        Order order = new Order();
        order.OrderID = (int)sqlDR.GetValue(0);
        order.ItemName = sqlDR.GetValue(1).ToString();
        order.Quantity = sqlDR.GetValue(2).ToString();
        order.Price = sqlDR.GetValue(3).ToString();
        order.Amount = sqlDR.GetValue(4).ToString();
        orders.Add(order);
    }
    sqlCon.Close();
 
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    string str = serializer.Serialize(orders);
    return new HttpResponseMessage() { Content = new StringContent(str, Encoding.UTF8, "text/plain") };
}
 
[AcceptVerbs("Post")]
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare)]
public HttpResponseMessage SaveChangesToDatabase()
{
    string editedValues = HttpContext.Current.Request.Params["editedValues"];
    JavaScriptSerializer serialize = new JavaScriptSerializer();
    List<Order> editedData = serialize.Deserialize<List<Order>>(editedValues);
 
    SqlConnection sqlCon = new SqlConnection(connetionString);
    sqlCon.Open();
    for (int i = 0; i < editedData.Count; i++)
    {
        var order = editedData[i];
        SqlCommand selectComm = new SqlCommand("SELECT * FROM [dbo].[Table] WHERE [OrderID] = '" + order.OrderID + "'", sqlCon);
        var hasFileInDB = selectComm.ExecuteScalar();
        if (hasFileInDB == null)
        {
            SqlCommand sqlComm = new SqlCommand("INSERT INTO [dbo].[Table]([OrderID], [ItemName], [Quantity], [Price], [Amount]) VALUES (@OrderID, @ItemName, @Quantity, @Price, @Amount)", sqlCon);
            sqlComm.Parameters.AddWithValue("@OrderID", order.OrderID);
            sqlComm.Parameters.AddWithValue("@ItemName", order.ItemName);
            sqlComm.Parameters.AddWithValue("@Quantity", order.Quantity);
            sqlComm.Parameters.AddWithValue("@Price", order.Price);
            sqlComm.Parameters.AddWithValue("@Amount", order.Amount);
            sqlComm.ExecuteNonQuery();
        }
        else
        {
            SqlCommand updateComm = new SqlCommand("UPDATE [dbo].[Table] SET ItemName=@ItemName, Quantity=@Quantity, Price=@Price, Amount=@Amount WHERE OrderID=@OrderID", sqlCon); // Update edited data to DB.
            updateComm.CommandTimeout = 0;
            updateComm.Parameters.AddWithValue("@OrderID", order.OrderID);
            updateComm.Parameters.AddWithValue("@ItemName", order.ItemName);
            updateComm.Parameters.AddWithValue("@Quantity", order.Quantity);
            updateComm.Parameters.AddWithValue("@Price", order.Price);
            updateComm.Parameters.AddWithValue("@Amount", order.Amount);
            updateComm.ExecuteNonQuery();
        }
    }
    sqlCon.Close();
    return new HttpResponseMessage() { Content = new StringContent("Successfully updated", Encoding.UTF8, "text/plain") };
}

 

MVC

 

CSHTML

<input type="button" value="Save Changes to DB" id="saveChangesToDB" />
@(Html.EJ().Spreadsheet<object>("FlatSpreadsheet")
    .ColumnWidth(110)
    .Sheets(sheet =>
    {
        sheet.Datasource(@ViewBag.Datasource).PrimaryKey("OrderID").Add();
    })
    .ClientSideEvents(eve => eve.LoadComplete("onLoadComplete"))
)
<script type="text/javascript">    
    $(function () {
        $("#saveChangesToDB").on("click", function () {
            var ssObj = $("#FlatSpreadsheet").data("ejSpreadsheet"), key, rowIdx, sheetIdx = ssObj.getActiveSheetIndex(), editedChanges = ssObj.XLEdit.saveEditingValue().EditedData,
                dataSettings = ssObj.getDataSettings(sheetIdx)[0], isShowHeader = dataSettings.showHeader, dataSource = dataSettings.dataSource, changedDataSource = [], pushedRowColl = [];
            if (!editedChanges.length) {
                ssObj.alert("Please edit any cells and try again!");
                return;
            }
            ssObj.showWaitingPopUp();
            for (key in editedChanges) {
                rowIdx = editedChanges[key].CellIndex.RowIndex;
                if (isShowHeader)
                    rowIdx--;
                if (pushedRowColl.indexOf(rowIdx) < 0) {
                    changedDataSource.push(dataSource[rowIdx]);
                    pushedRowColl.push(rowIdx);
                }
            }
            $.ajax({
                type: "POST",
                url: "Home/SaveChangesToDatabase",
                data: { editedValues: JSON.stringify(changedDataSource) },
                success: function (response) {
                    ssObj.alert(response);
                    ssObj.hideWaitingPopUp();
                },
                error: function (err) {
                    ssObj.alert(err.statusText);
                    ssObj.hideWaitingPopUp();
                }
            });
        });
    });
    function onLoadComplete(args) {
        if (!this.isImport) {
            this.XLEdit.saveEditingValue(); //Get or reset the saved changes collection after data loaded
        }
    }
</script>

 

CONTROLLER

private static string connetionString = ConfigurationManager.ConnectionStrings["SpreadDBConnectionString"].ConnectionString;
public ActionResult Index()
{
    @ViewBag.Datasource = GetDataFromDB();
    return View();
}
 
private List<Order> GetDataFromDB()
{
    List<Order> orders = new List<Order>();
    SqlConnection sqlCon = new SqlConnection(connetionString);
    SqlCommand sqlComm = new SqlCommand("SELECT * FROM [dbo].[Table]", sqlCon);
    sqlCon.Open();
    SqlDataReader sqlDR = sqlComm.ExecuteReader();
    while (sqlDR.Read())
    {
        Order order = new Order();
        order.OrderID = (int)sqlDR.GetValue(0);
        order.ItemName = sqlDR.GetValue(1).ToString();
        order.Quantity = sqlDR.GetValue(2).ToString();
        order.Price = sqlDR.GetValue(3).ToString();
        order.Amount = sqlDR.GetValue(4).ToString();
        orders.Add(order);
    }
    sqlCon.Close();
    return orders;
}
 
//Save changes only
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveChangesToDatabase(string editedValues)
{
    JavaScriptSerializer serialize = new JavaScriptSerializer();
    List<Order> editedData = serialize.Deserialize<List<Order>>(editedValues);
 
    SqlConnection sqlCon = new SqlConnection(connetionString);
    sqlCon.Open();
    for (int i = 0; i < editedData.Count; i++)
    {
        var order = editedData[i];
        SqlCommand selectComm = new SqlCommand("SELECT * FROM [dbo].[Table] WHERE [OrderID] = '" + order.OrderID + "'", sqlCon);
        var hasFileInDB = selectComm.ExecuteScalar();
        if (hasFileInDB == null)
        {
            SqlCommand sqlComm = new SqlCommand("INSERT INTO [dbo].[Table]([OrderID], [ItemName], [Quantity], [Price], [Amount]) VALUES (@OrderID, @ItemName, @Quantity, @Price, @Amount)", sqlCon);
            sqlComm.Parameters.AddWithValue("@OrderID", order.OrderID);
            sqlComm.Parameters.AddWithValue("@ItemName", order.ItemName);
            sqlComm.Parameters.AddWithValue("@Quantity", order.Quantity);
            sqlComm.Parameters.AddWithValue("@Price", order.Price);
            sqlComm.Parameters.AddWithValue("@Amount", order.Amount);
            sqlComm.ExecuteNonQuery();
        }
        else
        {
            SqlCommand updateComm = new SqlCommand("UPDATE [dbo].[Table] SET ItemName=@ItemName, Quantity=@Quantity, Price=@Price, Amount=@Amount WHERE OrderID=@OrderID", sqlCon); // Update edited data to DB.
            updateComm.CommandTimeout = 0;
            updateComm.Parameters.AddWithValue("@OrderID", order.OrderID);
            updateComm.Parameters.AddWithValue("@ItemName", order.ItemName);
            updateComm.Parameters.AddWithValue("@Quantity", order.Quantity);
            updateComm.Parameters.AddWithValue("@Price", order.Price);
            updateComm.Parameters.AddWithValue("@Amount", order.Amount);
            updateComm.ExecuteNonQuery();
        }
    }
    sqlCon.Close();
    return Content("Successfully updated");
}

 

ASP

 

ASPX

<input type="button" value="Save Changes to DB" id="saveChangesToDB" />
<ej:Spreadsheet ID="FlatSpreadsheet" ColumnWidth="110" runat="server">
    <Sheets>
        <ej:Sheet PrimaryKey="OrderID"></ej:Sheet>
    </Sheets>
    <ClientSideEvents LoadComplete="onLoadComplete" />
</ej:Spreadsheet>
<script type="text/javascript">
 
    $(function () {
        $("#saveChangesToDB").on("click", function () {
            var ssObj = $("#" + '<% =FlatSpreadsheet.ClientID %>').data("ejSpreadsheet"), key, rowIdx, sheetIdx = ssObj.getActiveSheetIndex(), editedChanges = ssObj.XLEdit.saveEditingValue().EditedData,
                dataSettings = ssObj.getDataSettings(sheetIdx)[0], isShowHeader = dataSettings.showHeader, dataSource = dataSettings.dataSource, changedDataSource = [], pushedRowColl = [];
            if (!editedChanges.length) {
                ssObj.alert("Please edit any cells and try again!");
                return;
            }
            ssObj.showWaitingPopUp();
            for (key in editedChanges) {
                rowIdx = editedChanges[key].CellIndex.RowIndex;
                if (isShowHeader)
                    rowIdx--;
                if (pushedRowColl.indexOf(rowIdx) < 0) {
                    changedDataSource.push(dataSource[rowIdx]);
                    pushedRowColl.push(rowIdx);
                }
            }
            $.ajax({
                type: "POST",
                url: "Default.aspx/SaveChangesToDatabase",
                data: JSON.stringify({ editedValues: JSON.stringify(changedDataSource) }),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) {
                    ssObj.alert(response.d);
                    ssObj.hideWaitingPopUp();
                },
                error: function (err) {
                    ssObj.alert(err.statusText);
                    ssObj.hideWaitingPopUp();
                }
            });
        });
    });
    function onLoadComplete(args) {
        if (!this.isImport) {
            this.XLEdit.saveEditingValue(); //Get or reset the saved changes collection after data loaded
        }
    }
</script>

 

ASHX

private static string connetionString = ConfigurationManager.ConnectionStrings["SpreadDBConnectionString"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.FlatSpreadsheet.Sheets[0].Datasource = GetDataFromDB();
    }
}
 
private List<Order> GetDataFromDB()
{
    List<Order> orders = new List<Order>();
    SqlConnection sqlCon = new SqlConnection(connetionString);
    SqlCommand sqlComm = new SqlCommand("SELECT * FROM [dbo].[Table]", sqlCon);
    sqlCon.Open();
    SqlDataReader sqlDR = sqlComm.ExecuteReader();
    while (sqlDR.Read())
    {
        Order order = new Order();
        order.OrderID = (int)sqlDR.GetValue(0);
        order.ItemName = sqlDR.GetValue(1).ToString();
        order.Quantity = sqlDR.GetValue(2).ToString();
        order.Price = sqlDR.GetValue(3).ToString();
        order.Amount = sqlDR.GetValue(4).ToString();
        orders.Add(order);
    }
    sqlCon.Close();
    return orders;
}
 
//Save changes only
[WebMethod]
public static string SaveChangesToDatabase(string editedValues)
{
    JavaScriptSerializer serialize = new JavaScriptSerializer();
    List<Order> editedData = serialize.Deserialize<List<Order>>(editedValues);
 
    SqlConnection sqlCon = new SqlConnection(connetionString);
    sqlCon.Open();
    for (int i = 0; i < editedData.Count; i++)
    {
        var order = editedData[i];
        SqlCommand selectComm = new SqlCommand("SELECT * FROM [dbo].[Table] WHERE [OrderID] = '" + order.OrderID + "'", sqlCon);
        var hasFileInDB = selectComm.ExecuteScalar();
        if (hasFileInDB == null)
        {
            SqlCommand sqlComm = new SqlCommand("INSERT INTO [dbo].[Table]([OrderID], [ItemName], [Quantity], [Price], [Amount]) VALUES (@OrderID, @ItemName, @Quantity, @Price, @Amount)", sqlCon);
            sqlComm.Parameters.AddWithValue("@OrderID", order.OrderID);
            sqlComm.Parameters.AddWithValue("@ItemName", order.ItemName);
            sqlComm.Parameters.AddWithValue("@Quantity", order.Quantity);
            sqlComm.Parameters.AddWithValue("@Price", order.Price);
            sqlComm.Parameters.AddWithValue("@Amount", order.Amount);
            sqlComm.ExecuteNonQuery();
        }
        else
        {
            SqlCommand updateComm = new SqlCommand("UPDATE [dbo].[Table] SET ItemName=@ItemName, Quantity=@Quantity, Price=@Price, Amount=@Amount WHERE OrderID=@OrderID", sqlCon); // Update edited data to DB.
            updateComm.CommandTimeout = 0;
            updateComm.Parameters.AddWithValue("@OrderID", order.OrderID);
            updateComm.Parameters.AddWithValue("@ItemName", order.ItemName);
            updateComm.Parameters.AddWithValue("@Quantity", order.Quantity);
            updateComm.Parameters.AddWithValue("@Price", order.Price);
            updateComm.Parameters.AddWithValue("@Amount", order.Amount);
            updateComm.ExecuteNonQuery();
        }
    }
    sqlCon.Close();
    return "Successfully updated";
}

 

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments
Please sign in to leave a comment
Access denied
Access denied