Я буду интерпретировать ваш вопрос как требующий ответа в полных годах, полных календарных месяцах и любых оставшихся днях. Это должно быть довольно просто, за исключением случаев, когда месяц, содержащий дату начала, имеет больше дней, чем месяц, предшествующий месяцу, содержащему дату окончания *.
Пример:
Start Date End Date Result
28/1/19 1/3/19 1 month and 1 day
29/1/19 1/3/19 1 month and 1 day
30/1/19 1/3/19 1 month and 1 day
31/1/19 1/3/19 1 month and 1 day
Если вы примете это, то следующие формулы должны работать:
Год
=datedif(A1,B1,"Y")
Месяц
=mod(datedif(A1,B1,"m"),12)
[ 1119] День
=IF(DAY(B1)>=DAY(A1),DAY(B1)-DAY(A1),DAY(EOMONTH(B1,-1))+DAY(B1)-MIN(DAY(A1),DAY(EOMONTH(B1,-1))))
РЕДАКТИРОВАТЬ
* Проверено это на [118 ] этот веб-сайт и обнаружил, что он делает то же самое предположение - вы получаете такую же продолжительность (1 месяц и один день) с 28/1/19 по 1/3/19, как с 31/1/19 по 1/3 / 19, хотя общее количество дней (32 или 29) отличается.
Возможный обходной путь - взять дни, оставшиеся в начальном месяце
=IF(DAY(B1)>=DAY(A1),DAY(B1)-DAY(A1),DAY(EOMONTH(A1,0))-DAY(A1)+DAY(B1))
, что, кажется, согласуется с этим веб-сайтом
Вы также можете использовать аргумент MD Datedif:
=datedif(A1,B1,"MD")
Но как в Google Sheets, так и в Excel это может привести к отрицательному числу, как указано в документации Excel :
The "MD" argument may result in a negative number, a zero, or an inaccurate result. If you are trying to calculate the remaining days after the last completed month...
Ваш код должен работать. Но только после того, как GridView.DataBind () был вызван. Как правило, я не проверяю GridView сам, но источник данных вида сетки.
DataTable data = DAL.getdata();
if (data.Rows.Count == 0)
{
ShowEmptyData();
}
else
{
Grid.DataSource = dt;
Grid.DataBind();
}
Это не работает, так как GridView
привязан к данным и собирается получить фактическую данные в более позднее время при отображении страницы. Вы должны проверить это, напрямую запросив источник привязки данных в виде сетки (посмотрите, является ли фактический список, к которому привязано представление сетки, пустым или нет).
Если вы просто хотите отобразить что-то, когда оно пустое, вы должны использовать
в вашей разметке:
<asp:GridView runat="server">
<EmptyDataTemplate>The grid is empty</EmptyDataTemplate>
</asp:GridView>
Я согласен с другими ответами. Я хочу добавить немного информации, вы должны получить rows.count после метода привязки данных:
int rowCount = GridView.Rows.Count; // returns zero
GridView.DataBind();
rowCount = GridView.Rows.Count; // returns actual row count
Если вы используете привязку данных, то количество строк в источнике данных, а не количество в самой сетке.