15,922,427 members
See more:
I have a problem, i need help
I have table

ID EmpID Month_salary DaTe WorkShifts
1 001 MONTH01 2012-01-01 1
2 001 MONTH01 2012-01-02 2
3 001 MONTH01 2012-01-03 3
4 001 MONTH01 2012-01-03 1
5 001 MONTH01 2012-01-04 2
6 001 MONTH01 2012-01-05 3
.. ... ........ .......... ..
31 001 MONTH01 2012-01-31 3

I want datagridview :

 EmpID 2012-01-01 1 |2 |3 2012-01-02 1 |2 |3 2012-01-03 1 |2 |3 .......... 2012-01-31 1 |2 |3 001 x|x|x x|x|x x|x|x .......... x|x|x 002 x|x|x x|x|x x|x|x .......... x|x|x

1,2,3 means the work shift, each day there are three shifts. For example, here a month has 31 days. letter x means that the employee has to work.
How can I do to do as requested? Thanks all
Posted
Updated 3-Jun-12 18:02pm
v2
VJ Reddy 4-Jun-12 4:04am
Thank you for accepting the solution :)

## Solution 2

The given data can be transformed into the required format using `LINQ `query as shown below:

C#
```DataTable shiftData = new DataTable("ShiftData");

DataTable empShifts = new DataTable("EmpShifts");

for(int i=1; i<= 31; i++)
for(int j=1; j <=3; j++)

shiftData.AsEnumerable().GroupBy (dr => dr.Field<string>("EmpId")).Select (er => {
er.GroupBy (dr2 => dr2.Field<string>("Month")).Select (mr => {
DataRow row = empShifts.NewRow();
row["EmpId"]=er.Key;
row["Month"]=mr.Key;
mr.Select (ms =>
row[ms.Field<datetime>("Date").Day + "-" + ms.Field<int>("Shift").ToString()]="x").Count ();
return mr;
}).Count ();
return er;
}).Count ();

//ShiftData
//Id EmpId Month Date Shift
//1 001 Month01 1/1/2012 12:00:00 AM 1
//2 001 Month01 1/2/2012 12:00:00 AM 2
//3 001 Month01 1/3/2012 12:00:00 AM 3
//4 001 Month01 1/3/2012 12:00:00 AM 1
//5 001 Month01 1/4/2012 12:00:00 AM 2
//6 001 Month01 1/5/2012 12:00:00 AM 3
//7 002 Month01 1/1/2012 12:00:00 AM 1
//8 002 Month01 1/2/2012 12:00:00 AM 2
//9 002 Month01 1/3/2012 12:00:00 AM 3
//10 001 Month02 2/3/2012 12:00:00 AM 1
//11 001 Month02 2/4/2012 12:00:00 AM 2
//12 001 Month02 2/5/2012 12:00:00 AM 3

//empShift
//Headings--->EmpId Month 1-1 1-2 1-3 2-1 2-2 2-3 3-1 3-2 3-3 4-1 4-2 4-3 5-1 5-2 5-3 6-1 6-2 6-3 7-1 7-2 7-3 8-1 8-2 8-3 9-1 9-2 9-3 10-1 10-2 10-3 11-1 11-2 11-3 12-1 12-2 12-3 13-1 13-2 13-3 14-1 14-2 14-3 15-1 15-2 15-3 16-1 16-2 16-3 17-1 17-2 17-3 18-1 18-2 18-3 19-1 19-2 19-3 20-1 20-2 20-3 21-1 21-2 21-3 22-1 22-2 22-3 23-1 23-2 23-3 24-1 24-2 24-3 25-1 25-2 25-3 26-1 26-2 26-3 27-1 27-2 27-3 28-1 28-2 28-3 29-1 29-2 29-3 30-1 30-2 30-3 31-1 31-2 31-3
//Row1--->001 Month01 x null  null  null  x null  x null  x null  x null  null  null  x null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null
//Row2--->001 Month02 null  null  null  null  null  null  x null  null  null  x null  null  null  x null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null
//Row3--->002 Month01 x null  null  null  x null  null  null  x null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  </int></datetime></string></string>```

The `LINQ `has deferred execution model, which means the query will be executed only when it is iterated or a scalar method like `Count `is called on it. Hence, in the above code to force immediate execution of the query `Count `extension method is used.

The `DataTable `generated above can be bound to the `DataGridView`.

The `DataGridView `does not have an in built feature to display `Header `in two rows as required. However, as explained here http://www.murrayhilltech.com/articles/articles.aspx?key=8[^] the `DataGridView `headers can be custom drawn.

violetqa 4-Jun-12 2:08am
Thanks you very much. I will try
violetqa 4-Jun-12 2:34am
Thanks you. I did it. Hihi
VJ Reddy 4-Jun-12 3:46am
You're welcome and thank you for the response :)
If the solution is helpful then the solution may be considered to vote and accept
Thank you.

## Solution 1

Pivot your data on the date, it should be done in the database

violetqa 4-Jun-12 0:04am
Can you guide details more? Thanks
violetqa 4-Jun-12 0:13am
I were pivot your data on the date but how do I get for each day work shift?