Here is the syntax of \cventry:
\cventry{1}{2}{3}{4}{5}{desc}
How to insert multiple paragraph in a desc part. Also it seems that cventry does not span in multiple pages which make the CV to seem awkward.
Here is the syntax of \cventry:
\cventry{1}{2}{3}{4}{5}{desc}
How to insert multiple paragraph in a desc part. Also it seems that cventry does not span in multiple pages which make the CV to seem awkward.
For the first problem, without redefining anything you can just use \endgraf at the desired paragraph break:
\cventry{1}{2}{3}{4}{5}{desc .... \endgraf descr ...}

\documentclass[11pt,a4paper,sans]{moderncv}
\moderncvstyle{casual}
\moderncvcolor{blue}
\usepackage{lipsum} %Just for dummy text
\name{John}{Doe}
\title{Resum'e title}
\begin{document}
\makecvtitle
\section{Education}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines. \endgraf Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines.}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{\lipsum[1-10]}
\end{document}
For the page breaks, you need to redefine \cventry. In the process you may as well allow ordinary paragraph breaks in the description (by making this a "long" command). The approach below is to define \cventrys as items in a special list customised via the enumitem pakcage. If this interferes with other uses of \cventry then you could define a newcommands \longcventry and \longcvitem with the definitions below and leave the original definitions intact.

\documentclass[11pt,a4paper,sans]{moderncv}
\moderncvstyle{casual}
\moderncvcolor{blue}
\usepackage{enumitem}
\renewcommand{\cventry}[7][.25em]{%
\cvitem[#1]{#2}{%
{\bfseries#3}%
\ifthenelse{\equal{#4}{}}{}{, {\slshape#4}}%
\ifthenelse{\equal{#5}{}}{}{, #5}%
\ifthenelse{\equal{#6}{}}{}{, #6}%
.\strut%
\ifthenelse{\equal{#7}{}}{}%
{\newline{\small\strut #7 \par}}}}
\renewcommand{\cvitem}[3][.25em]{%
\begin{mycvlist}
\item[#2] #3
\end{mycvlist}
\addvspace{#1}}
\newlist{mycvlist}{description}{1}
\setlist[mycvlist]{labelwidth=\hintscolumnwidth,labelsep=\separatorcolumnwidth,leftmargin=!,align=right,font=\normalfont}
\usepackage{lipsum} %Just for dummy text
\name{John}{Doe}
\title{Resum'e title}
\begin{document}
\makecvtitle
\section{Education}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines. \par Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines. Description
text that is long and stretches over several lines.}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{\lipsum[1-10]}
\end{document}
The reason some redefinition is necessary, is that as standard cventry builds a tabular and then puts the description part in a minipage, but neither tabular nor minipage will break over pages.
Addition If you need long labels then you need to use a slightly more elaborate definition for \cvitem wrapping the label in a box and making sure the text inside is right aligned:
\renewcommand{\cvitem}[3][.25em]{%
\begin{mycvlist}
\item[{\parbox[t][\baselineskip]{\hintscolumnwidth}{\raggedleft #2}}] #3
\end{mycvlist}
\addvspace{#1}}
Unfortunately enumitem does not contain a standard option for this. Here is code, in the newer style of moderncv, without a fullstop at the end of the first line.
\documentclass[11pt,a4paper,sans]{moderncv}
\moderncvstyle{casual}
\moderncvcolor{blue}
\usepackage{enumitem}
\renewcommand{\cventry}[7][.25em]{%
\cvitem[#1]{#2}{%
{\bfseries#3}%
\ifthenelse{\equal{#4}{}}{}{, {\slshape#4}}%
\ifthenelse{\equal{#5}{}}{}{, #5}%
\ifthenelse{\equal{#6}{}}{}{, #6}%
\strut
\ifthenelse{\equal{#7}{}}{\par\vspace{-0.8\baselineskip}}{%
\newline\small\strut #7 \par}}}
\renewcommand{\cvitem}[3][.25em]{%
\begin{mycvlist}
\item[{\parbox[t][\baselineskip]{\labelwidth}{\raggedleft #2}}] #3
\end{mycvlist}
\addvspace{#1}}
\newlist{mycvlist}{description}{1}
\setlist[mycvlist]{labelwidth=\hintscolumnwidth,labelsep=\separatorcolumnwidth,align=right,leftmargin=!,font=\normalfont}
\usepackage{lipsum} %Just for dummy text
\name{John}{Doe}
\title{Resum'e title}
\begin{document}
\makecvtitle
\section{Education}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{\lipsum[2]}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{}
\cventry{year--year, year--year and year--year}{Degree}{Institution}{City}{\textit{Grade}}{\lipsum[1-10]}
\end{document}
Very late answer, I know, but I found Andrew's response to be excellent. The only issue I had was that some of the text from the first argument of \cventry and \cvitem was inside the left margin. This happened because the text in these arguments was longer than the allocated width. I fixed this by changing the align option. I changed
\setlist[mycvlist]{labelwidth=\hintscolumnwidth,labelsep=\separatorcolumnwidth,leftmargin=!,align=right,font=\normalfont}
to
\setlist[mycvlist]{labelwidth=\hintscolumnwidth,labelsep=\separatorcolumnwidth,leftmargin=!,align=parleft,font=\normalfont}.
This will seem trivial to many people, but as a fairly new user this wasn't obvious to me.
\labelwidthwith\hintscolumnwidthotherwise it would not have the appropriate width if you change this parameter (particularly visible with\tlcventry) 2) the spacing is significantly larger that what I get by default. In my experience, usingnosepin the\setlist, replacing the\baselineskipwith.85em, and adding a condition for empty contents like.\strut\ifthenelse{\equal{\detokenize{#7}}{}}{\vspace{1.1mm}}{\newline{\small\strut #7 \par}}}}gives me a much closer look. – tobiasBora Oct 27 '23 at 16:49\hintscolumnwidthis now used consistently. I also now check for an empty last argument – Andrew Swann Oct 30 '23 at 13:01\nopagebreakor follow https://tex.stackexchange.com/questions/2644/how-to-prevent-a-page-break-before-an-itemize-list (my item inside being a list)… without success. – tobiasBora Nov 10 '23 at 01:12\nopagebreakbefore and after\newlinein\cventryand before and after\addvspace{#1}in\cvitemmay work. Is that a solution for you? – Andrew Swann Nov 10 '23 at 12:23\clearpagebefore a breaking\cventry– Andrew Swann Nov 10 '23 at 12:24\Needspace{5\baseline}before a new item, but this looks a bit dirty solution. – tobiasBora Nov 10 '23 at 13:13