- Home
- Forum
- ASP.NET Web Forms
- Open and save data from SQL Table in Spreadsheet.
Open and save data from SQL Table in Spreadsheet.
Hi,
I have checked and implemented the examples of saving and opening spreadsheet data from sql server both in stream and json format and these are working fine.
But i have to implement loading and saving sql table data in table format in row and columns as .
| OrderID | Cust_ID | City |
| 12345 | 1001 | Solan |
| 12346 | 1002 | Ghana |
On page load i have to load this table data as it is in Spreadsheet and after making changes to table save this table back to sql server as :
| OrderID | Cust_ID | City |
| 12345 | 1001 | Miami |
| 12346 | 1002 | FIZI and adding some chages or adding more data to this table |
How can i acheive this requirement , any help??
SIGN IN To post a reply.
13 Replies
SK
Shanmugaraja K
Syncfusion Team
May 22, 2017 05:07 AM UTC
Hi Pradeep,
Thanks for using Syncfusion products,
We can achieve your requirement by using ejDataManager, we have created simple sample based on your requirement. Here we have sent the edited records details to server by using $.ajax method and saved the edited data into the database. Please refer the below code example,
[ASPX]
|
<input type="button" id="save" value="Save" onclick="saveData()" />
<ej:DataManager ID="dataManager1" runat="server" URL="SpreadsheetFeatures.aspx/Data" BatchURL="SpreadsheetFeatures.aspx/Save" Adaptor="WebMethodAdaptor" />
<ej:Spreadsheet ID="Spreadsheet1" runat='server' ClientIDMode="Static">
<ClientSideEvents LoadComplete="loadComplete" />
<ScrollSettings Width="100%" Height="540" IsResponsive="true" />
<Sheets>
<ej:Sheet DataManagerID="dataManager1" Query="ej.Query().take(10).select(['OrderID', 'Quantity', 'Price', 'Amount', 'Discount'])" PrimaryKey="OrderID"></ej:Sheet>
</Sheets>
</ej:Spreadsheet>
<script type="text/javascript">
function saveData() {
var xlObj = $('#Spreadsheet1').data("ejSpreadsheet"), changes = xlObj.getSheet(xlObj.getActiveSheetIndex()).batchChanges.changed;
if (changes.length) {
$.ajax({
type: "POST",
url: "SpreadsheetFeatures.aspx/Save",
data: JSON.stringify({ changed: JSON.stringify(changes) }),
contentType: "application/json; charset=utf-8",
dataType: 'json',
success: function (data) {
if (data.d == "Success")
alert("Edited data updated successfully!!!");
else
alert("Failed!!!");
}
});
}
}
</script>
|
[C#]
|
[WebMethod()]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static object Data(DataManager value)
{
string dbConnectionStr = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\SpreadsheetData.mdf;Integrated Security=True";
SqlConnection sqlCon = new SqlConnection(dbConnectionStr);
SqlCommand sqlComm = new SqlCommand("SELECT [OrderID],[Quantity],[Price],[Amount],[Discount] FROM [dbo].[Table]", sqlCon);
sqlCon.Open();
List<Orders> order = new List<Orders>();
SqlDataReader sqlDR = sqlComm.ExecuteReader();
while (sqlDR.Read())
{
order.Add(new Orders() { OrderID = (int)sqlDR.GetValue(0), Quantity = (int)sqlDR.GetValue(1), Price = (int)sqlDR.GetValue(2), Amount = (int)sqlDR.GetValue(3), Discount = (int)sqlDR.GetValue(4) });
}
sqlCon.Close();
return new { result = order, count = order.Count };
}
[WebMethod]
public static string Save(string changed)
{
string changedData = HttpContext.Current.Request.Params["changed"];
JavaScriptSerializer js = new JavaScriptSerializer();
try
{
List<Orders> changes = js.Deserialize<List<Orders>>(changed);
string dbConnectionStr = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\SpreadsheetData.mdf;Integrated Security=True";
SqlConnection sqlCon = new SqlConnection(dbConnectionStr);
foreach (var i in changes)
{
SqlCommand sqlComm = new SqlCommand("UPDATE [Table] SET [Quantity] = @Quantity, [Price] = @Price, [Amount] = @Amount, [Discount] = @Discount Where [OrderID] = @OrderID", sqlCon);
sqlComm.Parameters.AddWithValue("@OrderID", i.OrderID);
sqlComm.Parameters.AddWithValue("@Quantity", i.Quantity);
sqlComm.Parameters.AddWithValue("@Price", i.Price);
sqlComm.Parameters.AddWithValue("@Amount", i.Amount);
sqlComm.Parameters.AddWithValue("@Discount", i.Discount);
sqlCon.Open();
sqlComm.ExecuteNonQuery();
sqlCon.Close();
}
return "Success";
}
catch (Exception ex)
{
return "Failed";
}
}
|
Also, we have attached sample with these code example and the same can be downloaded from the below location,
Sample: SpreadsheetSample
Regards,
Shanmugaraja K
JE
Jose Eslava
May 14, 2018 08:54 PM UTC
How to opening spreadsheet data from sql server after a dropdownlist selection?
I attache source code sample without success.
SP
Sangeetha Priya Murugan
Syncfusion Team
May 15, 2018 12:54 PM UTC
Hi Jose,
We would like to let you know that, we have already provided a solution for your requirement “To open spreadsheet data from Sql server based on dropdownlist selection” in the below KB link for all platforms (JS, MVC & ASP). However, for your convenience – we have prepared an ASP.NET Web Form sample to demonstrate your requirement and the same can be downloaded from the following sample link.
KB link: https://www.syncfusion.com/kb/7567/how-to-save-and-retrieve-the-spreadsheet-data-in-database
Sample Link: http://www.syncfusion.com/downloads/support/forum/130584/ze/SyncfusionASPNETApplication11344642444
Could you please check the above sample & KB link and get back to us if you need any further assistance?
Regards,
Sangeetha Priya M
PS
Prashad Sri Tharanga
November 15, 2020 04:15 PM UTC
How can apply this to ASP.Net Core with ejs-spreadsheet ?
I want pass spreadsheet entered data to HttpPost method
SP
Sangeetha Priya Murugan
Syncfusion Team
November 16, 2020 06:41 AM UTC
Hi Prashad Sri Tharanga,
Thank you for your update.
We have checked your reported requirement and it can be achievable in our spreadsheet by using the openFromJson and saveAsJson method. We have already demonstrated this in our KB documentation itself. Please find the link below.
Could you please check the above link and get back to us, if you need any further assistance on this.
Regards,
Sangeetha M
PS
Prashad Sri Tharanga
November 17, 2020 11:02 AM UTC
This script does not pass data to the POST method, its coming up as null. Please check the below screenshot.

<script>
document.getElementById("saveToServer").onclick = function () {
var spreadsheetObj = ej.base.getComponent(document.getElementById('spreadsheet'), 'spreadsheet');
spreadsheetObj.saveAsJson().then((Json) =>
fetch("/Stages/SaveFiletoDB", {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
FileName: document.getElementById("filename").value,
JSONData: JSON.stringify(Json.jsonObject.Workbook),
ContentType: "Xlsx",
VersionType: "Xlsx",
})
})
.then((basePath) => {
console.log("file saved");
})
);
}
SP
Sangeetha Priya Murugan
Syncfusion Team
November 17, 2020 12:41 PM UTC
Hi Prashad Sri Tharanga,
Thank you for your update.
We have checked your reported requirement to send the spreadsheet data to the server. And it can be achievable in our spreadsheet by using openFromJson and saveAsJson in a button click event.
|
<label>File name:</label>
<input type="text" id="filename" value="Sample1" placeholder="Specify file name">
<button id="LoadFromDataBase" class="e-btn">LoadFromDataBase</button>
<button id="saveToServer" class="e-btn">saveToServer</button>
<ejs-spreadsheet id="spreadsheet" openUrl="Home/LoadFromDataBase" saveUrl="Home/SaveFiletoDB">
<e-spreadsheet-sheets>
<e-spreadsheet-sheet name="Car Sales Report">
</e-spreadsheet-sheet>
</e-spreadsheet-sheets>
</ejs-spreadsheet>
<script>
document.getElementById("saveToServer").onclick = function () {
var spreadsheetObj = ej.base.getComponent(document.getElementById('spreadsheet'), 'spreadsheet');
spreadsheetObj.saveAsJson().then((Json) => {
var formData = new FormData();
formData.append('JSONData', JSON.stringify(Json.jsonObject.Workbook));
formData.append('FileName', document.getElementById("filename").value);
formData.append('saveType', 'Xlsx');
fetch('Home/SaveFiletoDB', {
method: 'POST',
body: formData
}).then((basePath) => {
console.log("file saved");
})
}
);
}
document.getElementById("LoadFromDataBase").onclick = function () {
var spreadsheetObj = ej.base.getComponent(document.getElementById('spreadsheet'), 'spreadsheet');
fetch('/Home/LoadFromDataBase', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ Name: (document.getElementById("filename")).value }),
})
.then((response) => response.json())
.then((data) => {
spreadsheetObj.openFromJson({ file: data });
})
}
</script>
//Open saved Spreadsheet data from database
public IActionResult LoadFromDataBase([FromBody]FileOptions file)
{
// Convert Spreadsheet data as Stream.
OpenRequest open = new OpenRequest();
MemoryStream dataStream = new MemoryStream();
SqlConnection sqlCon = new SqlConnection(connectionString);
SqlCommand sqlComm = new SqlCommand("SELECT * FROM [dbo].[Table1] WHERE [filename] = '" + file.Name + "'", sqlCon);
sqlCon.Open();
SqlDataReader sqlDR = sqlComm.ExecuteReader();
while (sqlDR.Read())
{
dataStream = new MemoryStream((byte[])sqlDR.GetValue(1));
IFormFile formFile = new FormFile(dataStream, 0, dataStream.Length, "", file.Name + ".xlsx"); // converting MemoryStream to IFormFile
open.File = formFile;
}
sqlCon.Close();
return Content(Workbook.Open(open));
}
// Save the Spreadsheet data as byte array to database.
public IActionResult SaveFiletoDB(SaveSettings saveSettings)
{
//save the file to database
MemoryStream dataStream = Workbook.Save<MemoryStream>(saveSettings);
byte[] dataBytes = new BinaryReader(dataStream).ReadBytes(Convert.ToInt32(dataStream.Length));
SqlConnection sqlCon = new SqlConnection(connectionString);
sqlCon.Open();
SqlCommand sqlComm = new SqlCommand("INSERT INTO [dbo].[Table1]([filename], [databytes]) VALUES (@filename, @databytes)", sqlCon);
sqlComm.Parameters.AddWithValue("@fileName", saveSettings.FileName);
sqlComm.Parameters.AddWithValue("@dataBytes", dataBytes);
sqlComm.ExecuteNonQuery();
sqlCon.Close();
return Content("Saved in Server");
} |
For your convenience, we have prepared the sample based on your requirement. Please find the link below.
Sample Link: https://www.syncfusion.com/downloads/support/forum/130584/ze/SpreadsheetSaveToSQLTable1103262584
Could you please check the above link and get back to us, if you need any further assistance on this.
Regards,
Sangeetha M
PS
Prashad Sri Tharanga
November 18, 2020 06:47 AM UTC
Hi
Sangeetha M
Sample project very helpful.
Sample Link: https://www.syncfusion.com/downloads/support/forum/130584/ze/SpreadsheetSaveToSQLTable1103262584
Thank You.
SP
Sangeetha Priya Murugan
Syncfusion Team
November 18, 2020 08:46 AM UTC
Hi Prashad Sri Tharanga
Thank you for your update. Please feel free to contact us, if you need any further assistance on this.
Regards,
Sangeetha M
PS
Prashad Sri Tharanga
November 18, 2020 10:08 AM UTC
Hi Sangeetha Priya Murugan
Need Your Help
I got Json data like this.
"{\"openUrl\":\"Stages/LoadFromDataBase\",\"saveUrl\":\"Stages/SaveFiletoDB\",\"enableRtl\":false,\"locale\":\"en-US\",\"enablePersistence\":false,\"cellStyle\":{\"fontFamily\":\"Calibri\",\"verticalAlign\":\"bottom\",\"textIndent\":\"0pt\",\"backgroundColor\":\"#ffffff\",\"color\":\"#000000\",\"textAlign\":\"left\",\"fontSize\":\"11pt\",\"fontWeight\":\"normal\",\"fontStyle\":\"normal\",\"textDecoration\":\"none\",\"border\":\"\",\"borderLeft\":\"\",\"borderTop\":\"\",\"borderRight\":\"\",\"borderBottom\":\"\"},\"showRibbon\":true,\"showFormulaBar\":true,\"showSheetTabs\":true,\"allowEditing\":true,\"allowOpen\":true,\"allowSave\":true,\"enableContextMenu\":true,\"selectionSettings\":{\"mode\":\"Multiple\"},\"enableKeyboardNavigation\":true,\"allowNumberFormatting\":true,\"enableKeyboardShortcut\":true,\"enableClipboard\":true,\"allowCellFormatting\":true,\"allowSorting\":true,\"allowResizing\":true,\"allowHyperlink\":true,\"allowUndoRedo\":true,\"allowFiltering\":true,\"allowWrap\":true,\"allowInsert\":true,\"allowDelete\":true,\"allowDataValidation\":true,\"allowFindAndReplace\":true,\"allowMerge\":true,\"allowConditionalFormat\":true,\"allowImage\":true,\"activeSheetIndex\":0,\"cssClass\":\"\",\"height\":\"100%\",\"width\":\"100%\",\"allowScrolling\":true,\"scrollSettings\":{\"enableVirtualization\":true,\"isFinite\":false},\"definedNames\":[],\"sheets\":[{\"name\":\"Stages\",\"rowCount\":100,\"colCount\":100,\"topLeftCell\":\"A1\",\"activeCell\":\"C3\",\"selectedRange\":\"C3:C3\",\"usedRange\":{\"rowIndex\":2,\"colIndex\":2},\"rows\":[{\"cells\":[{\"value\":\"10\"},{\"value\":\"20\"},{\"value\":\"20\"}]},{\"cells\":[{\"value\":\"10\"},{\"value\":\"30\"},{\"value\":\"30\"}]}],\"showHeaders\":true,\"showGridLines\":true,\"state\":\"Visible\",\"protectSettings\":{},\"isProtected\":false,\"index\":0}]}"
But I want to get Spreadsheet cell entered data to list for save database. How can i deserialize the data or cell wise, Its not in the sample project
Thank You
SP
Sangeetha Priya Murugan
Syncfusion Team
November 23, 2020 06:58 AM UTC
Hi Prashad Sri Tharanga,
Thank you for your update.
We have checked your reported requirement and it can be achievable in our spreadsheet by using the DataManager and saveaAsJson method as like as below.
|
<script>
var json = [];
document.getElementById('save').addEventListener('click', function () {
var ssObj = ej.base.getComponent(document.getElementById('spreadsheet'), 'spreadsheet');
json = [];
var obj = {};
var ssObj = ej.base.getComponent(document.getElementById('spreadsheet'), 'spreadsheet');
var usedRange = ssObj.getActiveSheet().usedRange;
var selIndex = [1, 0, usedRange.rowIndex, usedRange.colIndex];
var range =
ssObj.getActiveSheet().name +
"!" +
ejs.spreadsheet.getRangeAddress([1, 0, selIndex[2], selIndex[3]]);
ssObj.getData(range).then(
(value) => {
(value).forEach(
(cell, key) => {
if (cell) {
// constructing the key value object
var indexes = ejs.spreadsheet.getRangeIndexes(key);
if (key.indexOf("A") > -1) {
obj["employeeID"] = cell.value;
} else if (key.indexOf("B") > -1) {
obj["lastName"] = cell.value;
} else if (key.indexOf("C") > -1) {
obj["firstName"] = cell.value;
} else if (key.indexOf("D") > -1) {
obj["title"] = cell.value;
} else if (key.indexOf("E") > -1) {
obj["titleOfCourtesy"] = cell.value;
}
if (indexes[1] === selIndex[3]) {
// row last index
json.push(obj);
obj = {};
}
}
}
);
console.log(json);
var formData = new FormData();
formData.append('JSONData', JSON.stringify(json));
fetch("https://localhost:44355/Home/SaveChangesToDatabase", { method: 'Post', body: formData })
.then((response) => {
var spreadObj = ej.base.getComponent(document.getElementById("spreadsheet"), "spreadsheet");
response.blob().then((response) => {
if (response.ok) {
return response.json();
} else {
return Promise.reject({
message: response.statusText
});
}
}).then((data) => {
alert(data);
});
})
}
);
});
</script>
public object LoadFromTable()
{
List<EmployeeData> datas = new List<EmployeeData>();
SqlConnection sqlCon = new SqlConnection(connectionString);
SqlCommand sqlComm = new SqlCommand("SELECT * FROM [dbo].[Employees]", sqlCon);
sqlCon.Open();
SqlDataReader sqlDR = sqlComm.ExecuteReader();
while (sqlDR.Read())
{
EmployeeData data = new EmployeeData();
data.employeeID = (int)sqlDR.GetValue(0);
data.lastName = sqlDR.GetValue(1).ToString();
data.firstName = sqlDR.GetValue(2).ToString();
data.title = sqlDR.GetValue(3).ToString();
data.titleOfCourtesy = sqlDR.GetValue(4).ToString();
datas.Add(data);
}
sqlCon.Close();
return new { Result= datas, Count= datas.Count };
}
[AcceptVerbs("Post")]
public string SaveChangesToDatabase(string JSONData)
{
JavaScriptSerializer serialize = new JavaScriptSerializer();
List<EmployeeData> editedData = serialize.Deserialize<List<EmployeeData>>(JSONData);
SqlConnection sqlCon = new SqlConnection(connectionString);
sqlCon.Open();
for (int i = 0; i < editedData.Count; i++)
{
var order = editedData[i];
SqlCommand selectComm = new SqlCommand("SELECT * FROM [dbo].[Employees] WHERE [EmployeeID] = '" + order.employeeID + "'", sqlCon);
var hasFileInDB = selectComm.ExecuteScalar();
if (hasFileInDB == null)
{
SqlCommand sqlComm = new SqlCommand("INSERT INTO [dbo].[Employees]([EmployeeID], [LastName], [FirstName], [Title], [TitleOfCourtesy]) VALUES (@EmployeeID, @LastName, @FirstName, @Title, @TitleOfCourtesy)", sqlCon);
sqlComm.Parameters.AddWithValue("@EmployeeID", order.employeeID);
sqlComm.Parameters.AddWithValue("@LastName", order.lastName);
sqlComm.Parameters.AddWithValue("@FirstName", order.firstName);
sqlComm.Parameters.AddWithValue("@Title", order.title);
sqlComm.Parameters.AddWithValue("@TitleOfCourtesy", order.titleOfCourtesy);
sqlComm.ExecuteNonQuery();
}
else
{
SqlCommand updateComm = new SqlCommand("UPDATE [dbo].[Employees] SET LastName=@LastName, FirstName=@FirstName, Title=@Title, TitleOfCourtesy=@TitleOfCourtesy WHERE EmployeeID=@EmployeeID", sqlCon); // Update edited data to DB.
updateComm.CommandTimeout = 0;
updateComm.Parameters.AddWithValue("@EmployeeID", order.employeeID);
updateComm.Parameters.AddWithValue("@LastName", order.lastName);
updateComm.Parameters.AddWithValue("@FirstName", order.firstName);
updateComm.Parameters.AddWithValue("@Title", order.title);
updateComm.Parameters.AddWithValue("@TitleOfCourtesy", order.titleOfCourtesy);
updateComm.ExecuteNonQuery();
}
}
sqlCon.Close();
return "Successfully updated";
} |
Sample Link: https://www.syncfusion.com/downloads/support/forum/130584/ze/SpreadsheetSaveToSQLTable-2050365607
Could you please check the above details and get back to us, if you need any further assistance on this.
Regards,
Sangeetha M
PS
Prashad Sri Tharanga
November 27, 2020 04:35 PM UTC
Hi Sangeetha Priya Murugan
Sample code very helpful.
Thank You.
SP
Sangeetha Priya Murugan
Syncfusion Team
November 30, 2020 06:26 AM UTC
Hi Prashad Sri Tharanga
Thank you for your update. Please feel free to contact us, if you need any further assistance on this.
Regards,
Sangeetha M
SIGN IN To post a reply.
- 13 Replies
- 5 Participants
-
PK Pradeep Kumar
- May 19, 2017 07:51 AM UTC
- Nov 30, 2020 06:26 AM UTC