You could use a set of events linked using a special DB field, e.g. "master_id".
Whenever an event is moved, you will have to find the other events using the master_id and move all of them by the same offset.
This doesn't provide 100% feedback during drag&drop (it will outline just one event) but the result should be fine.
Roughly:
DataStartField="start"
DataEndField="end"
DataValueField="id"
DataTagFields="master_id"
EventMove event handler:
DayPilotCalendar1_EventMove(object sender, EventMoveEventArgs e) {
string master = e.Tag["master_id"];
TimeSpan offset = e.NewStart - e.OldStart;
// "SELECT * FROM [events] WHERE [master_id] = @master"
DataTable dt = findEventsByMasterId(master);
foreach (DataRow dr in dt.Rows) {
string id = (string) dr["id"];
DateTime start = (DateTime) dr["start"];
DateTime end = (DateTime) dr["end"];
// "UPDATE [events] SET [start] = @start, [end] = @end WHERE [id] = @id"
moveEvent(id, start.Add(offset), end.Add(offset));
}
}