Оператор +
в Coq является ассоциативным слева, поэтому такие термины, как a + b + c + d
, фактически скрыты в ((a + b) + c) + d
. Это должно ответить, почему plus_comm
не делает то, что вы ожидаете.
Чтобы решить эти типы целей, вам нужно применить ряд лемм, как вы узнали. Это часто может быть утомительным, поэтому есть некоторые тактики для их решения, такие как omega
(см. этот вопрос).
Смотрите на ListViewPagedDataSource.
private ListViewPagedDataSource GetProductsAsPagedDataSource(DataView dv)
{
// Limit the results through a PagedDataSource
ListViewPagedDataSource pagedData = new ListViewPagedDataSource();
pagedData.DataSource = dv;
pagedData.MaximumRows = dv.Table.Rows.Count;
pagedData.TotalRowCount = dpTop.PageSize;
if (Request.QueryString[dpTop.QueryStringField] != null)
pagedData.StartRowIndex = (Convert.ToInt32(Request.QueryString[dpTop.QueryStringField]) - 1) * dpTop.PageSize;
else
pagedData.StartRowIndex = 0;
return pagedData;
}
, Хотя, у меня есть проблема при просматривании последней страницы. DataPager переходит назад к первой странице, но отображенные данные являются последней страницей.
Мы должны связать с данными представление списка снова в событии OnPreRender.
protected override void OnPreRender(EventArgs e)
{
ListView1.DataBind();
base.OnPreRender(e);
}
- Обновление
После работы над несколькими представлениями списка с asp.net ajax, я видел решение, которое имеет больше смысла, чем выше одного. Вы были бы обычно данные связывать Listview на методе загрузки страницы или обработчике событий нажатия кнопки и когда существует сообщение, отступают, привязка данных была бы потеряна, как описано выше в проблеме. Так, нам нужно к привязке данных снова на измененном обработчике событий свойств страницы для представления списка.
ListView_PagePropertiesChanged(object sender, EventArgs e)
{
ListView.DataSource=someDatasource;
ListView.DataBind()
}
Кроме того, если источник данных вашего ListView изменен (например, при отображении данных на основе параметров поиска), не забудьте сбросить пейджер каждый раз, когда источник данных обновляется. С помощью ListView это не так просто, как с помощью некоторых других элементов управления данными (например, GridView):
private void ResetListViewPager()
{
DataPager pager = (DataPager)ListViewMembers.FindControl("DataPager1");
if (pager != null)
{
CommandEventArgs commandEventArgs = new CommandEventArgs(DataControlCommands.FirstPageCommandArgument, "");
// MAKE SURE THE INDEX IN THE NEXT LINE CORRESPONDS TO THE CORRECT FIELD IN YOUR PAGER
NextPreviousPagerField nextPreviousPagerField = pager.Fields[0] as NextPreviousPagerField;
if (nextPreviousPagerField != null)
{
nextPreviousPagerField.HandleEvent(commandEventArgs);
}
// THIS COMMENTED-OUT SECTION IS HOW IT WOULD BE DONE IF USING A NUMERIC PAGER RATHER THAN A NEXT/PREVIOUS PAGER
//commandEventArgs = new CommandEventArgs("0", "");
//NumericPagerField numericPagerField = pager.Fields[0] as NumericPagerField;
//if (numericPagerField != null)
//{
// numericPagerField.HandleEvent(commandEventArgs);
//}
}
}