Hi team
I'm using batch saving. is there is any way to loop within datagrid and get the UpdatedCell value.. I try hereunder codes.
But it only gets the sourcedata value instead of Updated cell value. Or there must be other way to get my total amount in batch saving.
public double TotalAmount;
public async Task ComputeDetail()
{
TotalCostValue = QuantityValue * UnitCostValue;
await GridDetail.UpdateCell(RowIndexDetail, "TotalCost", TotalCostValue);
var RowsData = GridDetail.CurrentViewData;
foreach (SODetailEdit row in RowsData)
{
TotalAmount = TotalAmount + row.TotalCost;
}
}
}
public void CellSavedHandler(CellSaveArgs<SODetailEdit> args)
{
if (args.ColumnName == "Quantity")
{
QuantityValue = (double)args.Value;
ComputeDetail();
}
if (args.ColumnName == "UnitCost")
{
UnitCostValue = (double)args.Value;
ComputeDetail();
}
}
Warm Regards Tyrone
|
public async Task ComputeDetail()
{
TotalCostValue = QuantityValue * UnitCostValue;
. . .
var ChangedData = await Grid.GetBatchChangesAsync();
await Grid.UpdateCell(RowIndexDetail, "TotalCost", TotalCostValue);
. . .
} |
|
|
Thanks Rahul for the immediate reply,
By the way, How could I get the rows that has no changes?
|
<button @onclick="Get"> Get UnChanged</button>
<div>@UnChanged.Count</div>
<SfGrid @ref="Grid" DataSource="@Orders" AllowSelection="true" AllowPaging="true" Toolbar="@(new List<string>() { "Add", "Delete", "Update", "Cancel" })" Height="315">
<GridEvents OnCellSave="CellSaveHandler" CellSelecting="CellSelectingHandler" TValue="Order"></GridEvents>
<GridEditSettings AllowAdding="true" AllowEditing="true" AllowDeleting="true" Mode="EditMode.Batch"></GridEditSettings>
<GridSelectionSettings Mode=SelectionMode.Cell></GridSelectionSettings>
<GridColumns>
<GridColumn Field=@nameof(Order.OrderID) HeaderText="Order ID" IsPrimaryKey="true" TextAlign="TextAlign.Right" Width="120"></GridColumn>
. ..
</GridColumns>
</SfGrid>
@code{
SfGrid<Order> Grid;
. ..
public List<Order> UnChanged { get; set; } = new List<Order>();
public async Task Get()
{
UnChanged.Clear();
var ChangedData = await Grid.GetBatchChangesAsync(); //get batch changes
var CurrentView = await Grid.GetCurrentViewRecordsAsync(); // get current view data
for (var i = 0; i < ChangedData.ChangedRecords.Count; i++)
{
if (UnChanged.Count > 1)
{
UnChanged = UnChanged.Where(x => x.OrderID != ChangedData.ChangedRecords[i].OrderID).ToList();
}
else
{
UnChanged = CurrentView.Where(x => x.OrderID != ChangedData.ChangedRecords[i].OrderID).ToList();
}
}
}
. . .
}
|
Thanks Rahul. This is great
Lastly, How could I get the column value for each Row?
Since Reactive aggregate is not yet available.. I'm planning to get the totals from iteration of changed and unchanged data..
example:
for (var i = 0; i < ChangedData.ChangedRecords.Count; i++)
{
Totalcost+ = TotalCostFromThecell (changed)
}
for (var i = 0; i < Unchanged.Count; i++)
{
Totalcost+ = TotalCostFromThecell (unchanged)
}
Or there must be other way to get the total from batchmode.
|
<button @onclick="Get"> Get UnChanged</button>
<button @onclick="GetTotal">Get Total Value</button>
<div>@UnChanged.Count</div>
<div>Total Cost - @Totalcost</div>
. . .
@code{
SfGrid<Order> Grid;
. . .
public double? Totalcost { get; set; } = 0;
public async Task GetTotal()
{
Totalcost = 0;
var ChangedData = await Grid.GetBatchChangesAsync();
for (var i = 0; i < ChangedData.ChangedRecords.Count; i++)
{
Totalcost += ChangedData?.ChangedRecords[i].TotalCost;
}
for (var i = 0; i < UnChanged.Count; i++)
{
Totalcost += UnChanged[i].TotalCost;
}
}
. . .
}
|
Thanks Rahul,
Your code helps me a lot.. I made some finalization in the code.
public List<SODetailEdit> UnChanged { get; set; } = new List<SODetailEdit>();
public TotalAmount? Totalcost { get; set; } = 0;
public async Task GetTotal()
{
TotalAmount = 0;
UnChanged.Clear();
var ChangedData = await GridDetail.GetBatchChangesAsync(); //get batch changes
var CurrentView = await GridDetail.GetCurrentViewRecordsAsync(); // get current view data
for (var i = 0; i < CurrentView.Count; i++)
{
bool ISexists = false;
//Edit
for (var x = 0; x < ChangedData.ChangedRecords.Count; x++)
{
if (CurrentView[i]. SODetailID == ChangedData.ChangedRecords[x].SODetailID)
{
ISexists = true;
}
}
//Delete
for (var x = 0; x < ChangedData.DeletedRecords.Count; x++)
{
if (CurrentView[i].SODetailID == ChangedData.DeletedRecords[x].SODetailID)
{
ISexists = true;
}
}
//Adding Unchanged
if (ISexists == false)
{
UnChanged.Add(CurrentView[i]);
}
}
// Aggregation
//Added
for (var i = 0; i < ChangedData.AddedRecords.Count; i++)
{
TotalAmount += ChangedData.AddedRecords[i].Quantity;
}
//Edited
for (var i = 0; i < ChangedData.ChangedRecords.Count; i++)
{
TotalAmount += ChangedData.ChangedRecords[i].Quantity;
}
//Unchanged
for (var i = 0; i < UnChanged.Count; i++)
{
TotalAmount += UnChanged[i].Quantity;
}
StateHasChanged();
}
Warm Regards,