Querying employee schedules in a month
I'm going to try to avoid raging about the data table based data access layer because I doubt a random person on the internet is going to change the direction of your project. So, let's look at your SQL query:

SELECT Date, 
       Shift 
FROM   ScheduleList 
WHERE  ID = @ID 
  AND  MONTH(Date) = @Month
  AND  YEAR(Date) = @Year


I've removed the extra brackets because they were just adding noise. This query could easily be changed so you could add a covering index to your schedule list table:

SELECT Date, 
       Shift 
FROM   ScheduleList 
WHERE  ID = @ID 
  AND  Date &gt; @Date
  AND  Date &lt; DATEADD(MONTH, 1, @Date)


Combined with an index on the Date and Id columns which also includes Shift and your query will be much faster. 

CREATE INDEX IX_ScheduleList_Id_Date on your_schema.ScheduleList
(
    Id,
    Date
) INCLUDE (Shift)


I'd be more inclined to do this though:

SELECT Date, 
       Shift 
FROM   ScheduleList 
WHERE  ID = @ID 
  AND  Date &gt; @StartDate
  AND  Date &lt; @EndDate


This way you can search for schedule list in any window of time, not just one month at a time.

Having said that, what I'd actually do is return the employee list with their schedules at the same time - SQL is a relational database: it's good at joining related data together.

(SQL typed into browser and I'm rusty so it might not be 100% right).