when fill grid (in fill grid function) you need loop datatable rows and checks when repeated the ID(Primary), and store it in temporary variable then compare it with another rows in datatable when equal use string builder to append all job data inside it.
then bind datatable to your grid.
Ex.
DataTable dt = all data from database;
DataTable dtCurrent = new DataTable();
bool found = false;
dtCurrent = dt;
for (int i=0 ; i< dt.rows.count;i++)
{
int ID = dt.rows(i)("ID");
List<string> lst = new List<string>;
for (int j=0; j<dt.rows.count;> {
if (dt.rows(j)("ID") == ID)
lst.Add(row(j)("JobName"));
}
StringBuilder str = new StringBuilder();
for(int l =0; i<lst.count;> {
str.AppendFormat("{0},",lst(l).ToString(),Environment.NewLine);
}
for(int current = 0; current < dtCurrent.rows.count; current++)
{
if(dtCurrent.rows(current)("ID") == ID && found == false)
{
found = true;
dtCurrent(current)("JobName") = str.ToString();
}
if (found)
{
if(dt.rows(current)("ID") == ID)
{
dt.rows(current).delete();
}
}
}
}
grid.datasource = dt;</string></string></string>