That's because your loop
for (int w = 0; w < timeTableGridView.Columns.Count; w++)
iterates over every day of the week. If one of them is the same as the one you got from xml (which will always happen), you're adding a new row (what would that represent?) and then FOR EVERY ROW existing your setting up the task in a given day.
I think you may have some problems with understanding what and how would you represent in your datagridview. Right now data is redundant, since row with 7 columns will always use only 1 of them, while all others will be empty.
EDIT:
The thing is: you can't represent calendar in a datagridview this way (it's doable, but it'd be too difficult at this point). Assuming you want to do some kind of scheduler, your columns should be
Task Name, Date, Time and Type
and then each task from xml should be loaded as a row.