public async void LoadDataGridView()
        {
            // Luu lai dong hien tai dang chon
            int currentRowIndex;

            // Neu hien tai khong co dong nao duoc chon thi mac dinh la dong so 0
            if (dgvAirplane.SelectedRows.Count == 0)
            {
                currentRowIndex = 0;
            }
            else
            {
                currentRowIndex = dgvAirplane.Rows.IndexOf(dgvAirplane.SelectedRows[0]);
            }

            // Luu lai dong hien tai dang o dau` bang? trong dataGridView
            int firstRowIndex = dgvAirplane.FirstDisplayedScrollingRowIndex;

            if (firstRowIndex == -1)
            {
                firstRowIndex = 0;
            }

            // Goi API lay du lieu ve
            AirplaneWrapper airplaneWrapper = new AirplaneWrapper();
            List <Airplane> lstAirplane     = await airplaneWrapper.List();

            // Khai bao API de lay du lieu cua Loai may bay (AirplaneType)
            // va Thong tin ve` so luong cua tung loai ghe (AirplaneInfo)
            AirplaneTypeWrapper airplaneTypeWrapper = new AirplaneTypeWrapper();
            AirplaneInfoWrapper airplaneInfoWrapper = new AirplaneInfoWrapper();

            // Goi API lay du lieu ve
            List <AirplaneType> lstAirplaneType = await airplaneTypeWrapper.List();

            List <AirplaneInfo> lstAirplaneInfo = await airplaneInfoWrapper.List();

            // Tao bang de chua du lieu tra ve tu API
            DataTable table = new DataTable();

            table.Columns.Add("AirplaneCode");       // Ma may bay
            table.Columns.Add("AirplaneTypeID");     // ID cua loai may bay
            table.Columns.Add("AirplaneTypeName");   // Ten cua loai may bay
            table.Columns.Add("FirstClassCount");    // So luong ghe hang nhat
            table.Columns.Add("BusinessClassCount"); // So luong ghe hang Thuong gia
            table.Columns.Add("ClubClassCount");     // So luong ghe thuong
            table.Columns.Add("IsActive");           // Trang thai cua may bay (con hoat dong khong)

            // Kiem tra xem ket qua goi API co thanh cong hay khong
            if (lstAirplane != null)
            {
                // Lap qua tung "dong` du lieu"
                foreach (Airplane airplane in lstAirplane)
                {
                    // Goi API de lay du lieu cua Loai may bay (AirplaneType)
                    AirplaneType airplaneType = lstAirplaneType.Where(at => at.ID == airplane.TypeID).Single();

                    // Goi API de lay So luong cua moi Loai ghe tren may bay nay
                    List <AirplaneInfo> airplaneInfo = lstAirplaneInfo.Where(ai => ai.AirplaneTypeID == airplaneType.ID).ToList();

                    // Tao mot dong` trong bang winForm
                    DataRow row = table.NewRow();

                    // Gan du lieu len dong moi tao
                    row["AirplaneCode"]       = airplane.AirplaneCode;
                    row["AirplaneTypeID"]     = airplane.TypeID;
                    row["AirplaneTypeName"]   = airplaneType.Name;
                    row["FirstClassCount"]    = airplaneInfo.Where(ai => ai.ClassID == 1).Single().SeatCount;
                    row["BusinessClassCount"] = airplaneInfo.Where(ai => ai.ClassID == 2).Single().SeatCount;
                    row["ClubClassCount"]     = airplaneInfo.Where(ai => ai.ClassID == 3).Single().SeatCount;
                    row["IsActive"]           = airplane.IsActive;

                    // Gan dong moi tao vao bang
                    table.Rows.Add(row);
                }

                // Sau khi lap qua het cac dong du lieu
                // Ta co bang WinForm hoan chinh
                // Gan bang WinForm len DataGridView
                dgvAirplane.DataSource = table;

                // An? cot AirplaneTypeID di, khong hien cot nay
                dgvAirplane.Columns["AirplaneTypeID"].Visible = false;

                // Chon lai dong ban dau duoc chon truoc khi reload
                if (dgvAirplane.Rows.Count > 0)
                {
                    dgvAirplane.Rows[currentRowIndex].Selected = true;
                }

                // Cuon. toi' dong` duoc. chon.
                if (dgvAirplane.Rows.Count > 0)
                {
                    dgvAirplane.FirstDisplayedScrollingRowIndex = firstRowIndex;
                }
            }
        }
        /// <summary>
        /// Only use for generate sample data of table FlightSchedule
        /// This function will generate flight schedule for all route in database,
        /// each route will have <code>maxFlightSchedulePerRoute</code> flight schedules,
        /// each flight schedule of route will apart one day, starting from today.
        /// </summary>
        private async void AutoGenerateFlightSchedule()
        {
            DateTime startTime = DateTime.Now;

            Console.WriteLine("Start at {0}", startTime);

            FlightScheduleWrapper flightScheduleWrapper = new FlightScheduleWrapper();
            AirplaneWrapper       airplaneWrapper       = new AirplaneWrapper();
            AirplaneTypeWrapper   airplaneTypeWrapper   = new AirplaneTypeWrapper();
            AirplaneInfoWrapper   airplaneInfoWrapper   = new AirplaneInfoWrapper();
            RouteWrapper          routeWrapper          = new RouteWrapper();

            List <Airplane> lstAirplane = await airplaneWrapper.List();

            List <AirplaneType> lstAirplaneType = await airplaneTypeWrapper.List();

            List <AirplaneInfo> lstAirplaneInfo = await airplaneInfoWrapper.List();

            List <Route> lstRoute = await routeWrapper.List();

            int      flightScheduleOfCurrentRoute = 0;
            int      maxFlightSchedulePerRoute    = 15;
            DateTime startingDate         = DateTime.Now;
            int      currentAirplaneIndex = 0;
            int      count = 0;

            for (int routeIndex = 0, maxRouteIndex = lstRoute.Count - 1; routeIndex <= maxRouteIndex; routeIndex++)
            {
                Route currentRoute = lstRoute[routeIndex];

                do
                {
                    Airplane            currentAirplane     = lstAirplane[currentAirplaneIndex++];
                    AirplaneType        currentAirplaneType = lstAirplaneType.Find(at => at.ID == currentAirplane.TypeID);
                    List <AirplaneInfo> currentAirplaneInfo = lstAirplaneInfo.Where(ai => ai.AirplaneTypeID == currentAirplaneType.ID).ToList();
                    DateTime            departureDate       = startingDate.AddDays(flightScheduleOfCurrentRoute);

                    FlightSchedule flightSchedule = new FlightSchedule()
                    {
                        AirplaneCode      = currentAirplane.AirplaneCode,
                        RouteID           = currentRoute.ID,
                        DepartureDate     = departureDate,
                        FirstSeatAvail    = currentAirplaneInfo.Find(ai => ai.ClassID == 1).SeatCount,
                        BusinessSeatAvail = currentAirplaneInfo.Find(ai => ai.ClassID == 2).SeatCount,
                        ClubSeatAvail     = currentAirplaneInfo.Find(ai => ai.ClassID == 3).SeatCount,
                        IsActive          = true
                    };

                    if (await flightScheduleWrapper.Post(flightSchedule))
                    {
                        Console.WriteLine("Add flight schedule #{0} success!", ++count);
                    }
                    else
                    {
                        Console.WriteLine("Add flight schedule #{0} failed!", ++count);
                    }

                    if (currentAirplaneIndex >= lstAirplane.Count)
                    {
                        currentAirplaneIndex = 0;
                    }
                } while (++flightScheduleOfCurrentRoute < maxFlightSchedulePerRoute);

                flightScheduleOfCurrentRoute = 0;
            }

            DateTime endTime = DateTime.Now;

            Console.WriteLine("End at {0}", startTime);
            Console.WriteLine("Total time: {0}", (endTime - startTime).TotalSeconds);
        }
        public async void LoadDataGridView()
        {
            // Luu lai dong hien tai dang chon
            int currentRowIndex;

            // Neu hien tai khong co dong nao duoc chon thi mac dinh la dong so 0
            if (dgvAirplaneType.SelectedRows.Count == 0)
            {
                currentRowIndex = 0;
            }
            else
            {
                currentRowIndex = dgvAirplaneType.Rows.IndexOf(dgvAirplaneType.SelectedRows[0]);
            }

            // Luu lai dong hien tai dang o dau` bang? trong dataGridView
            int firstRowIndex = dgvAirplaneType.FirstDisplayedScrollingRowIndex;

            if (firstRowIndex == -1)
            {
                firstRowIndex = 0;
            }

            // Goi API lay du lieu ve
            AirplaneTypeWrapper airplaneTypeWrapper = new AirplaneTypeWrapper();
            List <AirplaneType> lstAirplaneType     = await airplaneTypeWrapper.List();

            AirplaneInfoWrapper airplaneInfoWrapper = new AirplaneInfoWrapper();
            List <AirplaneInfo> lstAirplaneInfo     = await airplaneInfoWrapper.List();

            // Tao bang de chua du lieu tra ve tu API
            DataTable table = new DataTable();

            table.Columns.Add("ID");
            table.Columns.Add("Name");
            table.Columns.Add("FirstClassSeat");
            table.Columns.Add("BusinessClassSeat");
            table.Columns.Add("ClubClassSeat");
            table.Columns.Add("IsActive");

            // Kiem tra xem ket qua goi API co thanh cong hay khong
            if (lstAirplaneType != null)
            {
                // Lap qua tung "dong` du lieu"
                foreach (AirplaneType airplaneType in lstAirplaneType)
                {
                    // Tao mot dong` trong bang winForm
                    DataRow row = table.NewRow();

                    // Gan du lieu len dong moi tao
                    row["ID"]                = airplaneType.ID;;
                    row["Name"]              = airplaneType.Name;
                    row["FirstClassSeat"]    = lstAirplaneInfo.Find(ai => ai.AirplaneTypeID == airplaneType.ID && ai.ClassID == 1).SeatCount;
                    row["BusinessClassSeat"] = lstAirplaneInfo.Find(ai => ai.AirplaneTypeID == airplaneType.ID && ai.ClassID == 2).SeatCount;
                    row["ClubClassSeat"]     = lstAirplaneInfo.Find(ai => ai.AirplaneTypeID == airplaneType.ID && ai.ClassID == 3).SeatCount;
                    row["IsActive"]          = airplaneType.IsActive;

                    // Gan dong moi tao vao bang
                    table.Rows.Add(row);
                }

                // Sau khi lap qua het cac dong du lieu
                // Ta co bang WinForm hoan chinh
                // Gan bang WinForm len DataGridView
                dgvAirplaneType.DataSource = table;

                // Chon lai dong ban dau duoc chon truoc khi reload
                if (dgvAirplaneType.Rows.Count > 0)
                {
                    dgvAirplaneType.Rows[currentRowIndex].Selected = true;
                }

                // Cuon. toi' dong` duoc. chon.
                if (dgvAirplaneType.Rows.Count > 0)
                {
                    dgvAirplaneType.FirstDisplayedScrollingRowIndex = firstRowIndex;
                }
            }
        }