Hi dharmendr sir,
I have a dynamic multiple google gantt chart that appear after after putting flight number flight date and flight type. and click on search button gantt chart of all department shown.
my gantt chart shows 24 hours x axis like start from 12 AM, then 2,4, 6, 8, 10.12PM, 2,4, 6, 8, 10,12AM.
I just want to change these 24 hours axis to min and max time from database.
i mean according to putting information of flight date no then with in this data min and max time of time should on x axis not 24 hours time.
i means just want to set min and max axxording to database available min and max time not 24 hours.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="GANTTCHART.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style>
.container {
width: 80%;
margin: 0 auto;
}
.chart-title {
font-weight: bold;
color: black;
font-size: 50px;
text-align: left;
}
.chart {
min-height:300px;
width:100%;
margin-bottom:80px;
}
text {
font-size: 24px !important;
}
.chart-container {
min-height: 800px;
width: 100%;
margin-bottom: 80px;
}
.chart-container .chart {
width: 100%;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', { 'packages': ['gantt'] });
function drawGanttChart(data, chartDivId) {
var dataTable = new google.visualization.DataTable();
dataTable.addColumn('string', 'Task ID');
dataTable.addColumn('string', 'Task Name');
dataTable.addColumn('string', 'Resource');
dataTable.addColumn('date', 'Start Date');
dataTable.addColumn('date', 'End Date');
dataTable.addColumn('number', 'Duration');
dataTable.addColumn('number', 'Percent Complete');
dataTable.addColumn('string', 'Dependencies');
var baseDate = new Date('2024-01-01');
dataTable.addRows([
['Min Time', '', '', new Date(2024, 0, 1, 0, 0), new Date(2024, 0, 1, 0, 0), 0, 0, ''],
['Max Time', '', '', new Date(2024, 0, 2, 0, 0), new Date(2024, 0, 2, 0, 0), 0, 0, '']
]);
var minTime = new Date(baseDate);
var maxTime = new Date(baseDate);
for (var i = 0; i < data.length; i++) {
var startTimeParts = data[i][2].split(':');
var endTimeParts = data[i][3].split(':');
var startTime = new Date(baseDate);
startTime.setHours(parseInt(startTimeParts[0], 10));
startTime.setMinutes(parseInt(startTimeParts[1], 10));
var endTime = new Date(baseDate);
endTime.setHours(parseInt(endTimeParts[0], 10));
endTime.setMinutes(parseInt(endTimeParts[1], 10));
minTime = minTime > startTime ? startTime : minTime;
maxTime = maxTime < endTime ? endTime : maxTime;
}
var options = {
height: 300,
width: '100%',
gantt: {
trackHeight: 30
},
hAxis: {
title: 'Time of Day',
format: 'HH:mm',
ticks: generateTicks(minTime, maxTime, 60 * 60 * 1000),
},
vAxis: {
title: 'Resource'
}
};
for (var i = 0; i < data.length; i++) {
try {
var taskId = "Task_" + data[i][0].toString();
var taskName = data[i][1].toString();
var resource = data[i][1].toString();
var startTimeParts = data[i][2].split(':');
var endTimeParts = data[i][3].split(':');
var startDate = new Date(baseDate);
startDate.setHours(parseInt(startTimeParts[0].split(' ')[1], 10));
startDate.setMinutes(parseInt(startTimeParts[1], 10));
var endDate = new Date(baseDate);
endDate.setHours(parseInt(endTimeParts[0].split(' ')[1], 10));
endDate.setMinutes(parseInt(endTimeParts[1], 10));
var duration = (endDate - startDate) / (1000 * 60 * 60 * 24);
var percentageComplete = parseInt("100");
var dependencies = "";
dataTable.addRows([[taskId, taskName, resource, startDate, endDate, duration, percentageComplete, dependencies]]);
} catch (error) {
console.error("Error processing data:", error);
console.error("Problematic data:", data[i]);
}
}
var chart = new google.visualization.Gantt(document.getElementById(chartDivId));
chart.draw(dataTable, options);
}
function generateTicks(minTime, maxTime, interval) {
var ticks = [];
var current = new Date(minTime);
while (current <= maxTime) {
ticks.push(new Date(current));
current.setTime(current.getTime() + interval);
}
return ticks;
}
$(document).ready(function () {
$("#btnView").click(function () {
var flightNo = $("#flightNo").val();
var flightDate = $("#flightDate").val();
var flightType = $("#flightType").val();
$.ajax({
type: "POST",
url: "WebForm1.aspx/GetChartData",
data: JSON.stringify({ flightNo: flightNo, flightDate: flightDate, flightType: flightType }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var departmentChartsContainer = $("#departmentChartsContainer");
departmentChartsContainer.empty();
for (var departmentName in response.d) {
var departmentData = response.d[departmentName];
var titleElement = $("<div class='chart-title'>").text(departmentName);
departmentChartsContainer.append(titleElement);
var chartDivId = "chart_div_" + departmentName;
var chartDiv = $("<div style='width: 100%;'>").attr("id", chartDivId).addClass("chart");
departmentChartsContainer.append(chartDiv);
drawGanttChart(departmentData, chartDivId);
}
if (Object.keys(response.d).length === 0) {
departmentChartsContainer.html("<p>No department data available.</p>");
}
},
error: function (response) {
alert(response.responseText);
}
});
return false;
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div class="container">
<div id="registration-form">
<div class='fieldset'>
<h1> Flight Operations Report</h1>
<div class="row">
<div class="input-group">
<asp:Label ID="Label1" runat="server" Text="Flight No" CssClass="label"></asp:Label>
<asp:TextBox ID="flightNo" runat="server" CssClass="input"></asp:TextBox>
</div>
<div class="input-group">
<asp:Label ID="Label2" runat="server" Text="Flight Date" CssClass="label"></asp:Label>
<asp:TextBox ID="flightDate" runat="server" CssClass="input" font-color="black" TextMode="Date"></asp:TextBox>
</div>
<div class="input-group">
<asp:Label ID="Label3" runat="server" Text="Flight Type" CssClass="label"></asp:Label>
<asp:DropDownList ID="flightType" runat="server" CssClass="input" style="color: Black; font-size: 20px;">
<asp:ListItem Text="Arrival" />
<asp:ListItem Text="Departure" />
</asp:DropDownList>
</div>
<div class="input-group">
<asp:Button ID="btnView" runat="server" Text="Submit" class="btn" />
</div>
</div>
</div>
</div>
<div id="departmentChartsContainer" style="margin-top:100px; "></div>
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace GANTTCHART
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static Dictionary<string, List<object>> GetChartData(string flightNo, string flightDate, string flightType)
{
string t = "Time";
string conString = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
string query = "SELECT Department.DeptName, ActionID, eventname, starttime, CASE WHEN ISNULL(endtime, '') = '' THEN CONVERT(varchar(5), DATEADD(MINUTE, 1, CONVERT(time, starttime))) ELSE endtime END AS endtime FROM events INNER JOIN Assign ON Assign.eventid = events.eventid INNER JOIN Department ON Department.DeptID = Assign.DeptID INNER JOIN Action ON Assign.AssignID = Action.AssignID INNER JOIN flights ON flights.flightid = Action.flightid WHERE flights.flightno = @flightNo AND flights.flightdate = @flightDate AND events.eventtype = @flightType AND events.eventgroup = '" + t + "' ";
using (SqlConnection con = new SqlConnection(conString))
{
using (SqlCommand cmd = new SqlCommand(query, con))
{
cmd.Parameters.AddWithValue("@flightNo", flightNo);
string flightDateStr = flightDate;
DateTime selectedDate = DateTime.Parse(flightDateStr);
cmd.Parameters.AddWithValue("@flightDate", selectedDate);
cmd.Parameters.AddWithValue("@flightType", flightType);
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
{
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
Dictionary<string, List<object>> departmentChartData = new Dictionary<string, List<object>>();
foreach (DataRow row in dt.Rows)
{
string departmentName = row["DeptName"].ToString();
if (!departmentChartData.ContainsKey(departmentName))
{
departmentChartData[departmentName] = new List<object>();
}
departmentChartData[departmentName].Add(new object[] {
row["ActionID"],
row["eventname"],
Convert.ToDateTime(row["starttime"].ToString().Replace('.', ':')).ToString(),
Convert.ToDateTime(row["endtime"].ToString().Replace('.', ':')).ToString()
});
}
return departmentChartData;
}
}
}
}
}
}
}
this is my both end code
please sir help me you helped me alot God bless u