|
<ej:Grid ID="OrdersGrid" runat="server" AllowPaging="True">
<PageSettings PageSize="4" />
<ClientSideEvents DataBound="dataBound" ActionComplete="complete" />
<Columns>
<ej:Column Field="OrderID" DefaultValue=10 HeaderText="Order ID" IsPrimaryKey="true" TextAlign="Right" Width="75" />
<ej:Column Field="CustomerID" HeaderText="Customer ID" Width="80" />
<ej:Column Template="#columnTemplate" HeaderText="Employee ID" TextAlign="Right" Width="150" />
</Columns>
</ej:Grid>
<script type="text/javascript">
function dataBound(args) {
var data = args.model.currentViewData;
for (var i = 0; i < data.length; i++) {
$("#container" + data[i].EmployeeID).ejChart({
series:
[{
dataSource: data,
xName: "Freight",
yName: "EmployeeID",
type: "line"
}],
});
}
}
function complete(args) {
if (args.requestType == "paging" ) {
var data = this.model.currentViewData;
for (var i = 0; i < data.length; i++) {
$("#container" + data[i].EmployeeID).ejChart({
series:
[{
dataSource: data,
xName: "Freight",
yName: "EmployeeID",
type: "line"
}],
});
}
}
}
</script>
<script type="text/x-jsrender" id="columnTemplate">
<div id="container{{:EmployeeID}}" style="width: 200px; height: 200px;" />
</script> |
|
<ej:Grid ID="gridAppointments" runat="server" AllowTextWrap="true" AllowSorting="true" AllowPaging="true">
<ClientSideEvents DataBound="dataBound" ActionComplete="complete" />
<Columns>
<ej:Column Field="OrderID" IsPrimaryKey="true" Width="50"></ej:Column>
<ej:Column Field="CustomerID" HeaderText="#" AllowEditing="true" Width="50">
</ej:Column>
<ej:Column Field="EmployeeID" Template="#columnTemplate" HeaderText="Title" ForeignKeyField="EmployeeID"
ForeignKeyValue="FirstName" TextAlign="Left" Width="90" />
</Columns>
</ej:Grid>
<script type="text/javascript">
function dataBound(args) {
var rows = args.model.currentViewData;
var ForeignKeyData = this.model.columns[2].dataSource; //dataSource from secondTable(ForeignKey data) to render Chart
for (var i = 0; i < rows.length; i++) {
$("#container" + rows[i].EmployeeID).ejChart({
series:
[{
dataSource: ForeignKeyData,
xName: "FirstName",
yName: "EmployeeID",
type: "line"
}],
});
}
}
function complete(args) {
if (args.requestType == "paging") {
var rows = args.model.currentViewData;
var ForeignKeyData = this.model.columns[2].dataSource;
for (var i = 0; i < rows.length; i++) {
$("#container" + rows[i].EmployeeID).ejChart({
series:
[{
dataSource: ForeignKeyData, //dataSource from secondTable(ForeignKey data) to render Chart
xName: "FirstName",
yName: "EmployeeID",
type: "line"
}],
});
}
}
}
</script>
<script type="text/x-jsrender" id="columnTemplate">
<div id="container{{:EmployeeID}}" style="width: 200px; height: 200px;" />
</script>
private void BindDataSource()
{
employee.Add(new Employee(1,"Jan"));
employee.Add(new Employee(2, "Feb"));
employee.Add(new Employee(3, "March"));
employee.Add(new Employee(4, "April"));
employee.Add(new Employee(5, "May"));
employee.Add(new Employee(6, "June"));
employee.Add(new Employee(7, "July"));
employee.Add(new Employee(8, "Aug"));
employee.Add(new Employee(9, "Sep"));
employee.Add(new Employee(10,"Oct"));
var index = this.gridAppointments.Columns.FindIndex(col => col.Field == "EmployeeID");
this.gridAppointments.Columns.ElementAt(index).DataSource = employee;
}
public class Employee
{
public Employee()
{
}
public Employee(int EmployeeId, string FirstName)
{
this.EmployeeID = EmployeeId;
this.FirstName = FirstName;
}
public int EmployeeID { get; set; }
public string FirstName { get; set; } //Bind FirstName(ForeignKeyValue) relates to EmployeeID from First Table
}
|
|
<ej:Grid ID="gridAppointments" runat="server" AllowTextWrap="true" AllowSorting="true" AllowPaging="true">
<ClientSideEvents DataBound="dataBound" ActionComplete="complete" />
<PageSettings PageSize="4" />
<Columns>
<ej:Column Field="EmployeeID" Template="#columnTemplate" HeaderText="Chart" ForeignKeyField="EmployeeID"
ForeignKeyValue="FirstName" TextAlign="Left" Width="90" />
. . .
</Columns>
</ej:Grid>
<script type="text/javascript">
function dataBound(args) {
var rows = args.model.currentViewData;
var ForeignKeyData = this.model.columns[2].dataSource;
for (var i = 0; i < rows.length; i++) {
$("#container" + rows[i].EmployeeID).ejChart({
series:
[{
dataSource: ForeignKeyData[i].ChartData,
xName: "Month",
yName: "Salary",
type: "line"
}],
});
}
}
function complete(args) {
if (args.requestType == "paging") {
var rows = args.model.currentViewData;
var ForeignKeyData = this.model.columns[2].dataSource;
for (var i = 0; i < rows.length; i++) {
$("#container" + rows[i].EmployeeID).ejChart({
series:
[{
dataSource: ForeignKeyData[i].ChartData,
xName: "Month",
yName: "Salary",
type: "line"
}],
});
}
}
}
</script>
private void BindDataSource()
{
. . . //new to bind ChartData as like given (you can bind chartDataSource as per this format to display different Chart on Grid columns)
employee.Add(new Employee(1,"Jan", new List<ChartData>() { new ChartData() { Month = "Apr", Salary = 50 }, new ChartData() { Month= "Jan", Salary= 20 } } ));
employee.Add(new Employee(2, "Feb", new List<ChartData>() { new ChartData() { Month = "Jan", Salary = 10 }, new ChartData() { Month = "Feb", Salary = 33 } }));
employee.Add(new Employee(3, "March", new List<ChartData>() { new ChartData() { Month = "Mar", Salary = 40 }, new ChartData() { Month = "April", Salary = 53 } }));
employee.Add(new Employee(4, "April", new List<ChartData>() { new ChartData() { Month = "May", Salary = 63 }, new ChartData() { Month = "June", Salary = 73 } }));
var index = this.gridAppointments.Columns.FindIndex(col => col.Field == "EmployeeID");
this.gridAppointments.Columns.ElementAt(index).DataSource = employee;
}
|
Hi, the sample works well until you sort by clicking on a column header. I don't want to sort by the chart, but I do need it to keep with the appropriate record and redisplay when the other columns are used for sorting? How do I accomplish this?
Hi Paul,
Greetings from Syncfusion Support.
Query#:- I don't want to sort by the chart, but I do need it to keep with the appropriate record and redisplay when the other columns are used for sorting?
From your query we suspect that (on performing Sort action for other columns Template column has been disappeared). To overcome this we suggest to render Template on ActionComplete event when requestType as Sorting or any other data operations.
Code below:-
|
<ej:Grid ID="gridAppointments" runat="server" AllowTextWrap="true" AllowSorting="true" AllowPaging="true"> <ClientSideEvents DataBound="dataBound" ActionComplete="complete" /> <ej:Column Field="EmployeeID" Template="#columnTemplate" HeaderText="Chart" ForeignKeyField="EmployeeID" ForeignKeyValue="FirstName" TextAlign="Left" Width="90" /> . . .
</Columns> </ej:Grid>
function complete(args) { if (args.requestType == "paging" || args.requestType == "sorting") { //use condition based on requestType var rows = args.model.currentViewData; var ForeignKeyData = this.model.columns[2].dataSource; for (var i = 0; i < rows.length; i++) { $("#container" + rows[i].EmployeeID).ejChart({ series: [{ dataSource: ForeignKeyData[i].ChartData, xName: "Month", yName: "Salary", type: "line" }], }); } } }
</script> <script type="text/x-jsrender" id="columnTemplate"> <div id="container{{:EmployeeID}}" style="width: 200px; height: 200px;" /> </script>
|
If we misunderstood your query or your requirement is different above please share more details to proceed further.
Regards,
Farveen sulthana T