Nano Hash - криптовалюты, майнинг, программирование

ASP.NET GridView, включение/отключение кнопок после пейджинга

Сейчас я успешно реализовал свой GridView, но, как всегда, меня беспокоит весь жизненный цикл ASP.NET. Я не могу понять, почему это не работает. Я связал OnPageIndexChanged GridView как таковой:

protected void GridView_PageIndexChanged(object sender, EventArgs e)
{
    // Enable/disable the previous/next buttons.
    LinkButton btnNextPage = (LinkButton)gvTable.BottomPagerRow.FindControl("btnNextPage");
    LinkButton btnPreviousPage = (LinkButton)gvTable.BottomPagerRow.FindControl("btnPreviousPage");
    btnNextPage.Enabled = false;
    btnPreviousPage.Enabled = false;
}

Это мой ASCX:

<asp:GridView ID="gvTable" runat="server" ShowHeader="true" PageSize="1" 
  AllowPaging="true" AllowSorting="true" DataSourceID="dsLinqActivities"
  AutoGenerateColumns="false" OnRowDataBound="GridView_DataBound"
  OnPageIndexChanged="GridView_PageIndexChanged">
  <Columns>
    <asp:BoundField DataField="Edited" HeaderText="Date" />
    <asp:BoundField DataField="Status" HeaderText="Status" />
    <asp:BoundField DataField="Activity" />
  </Columns>
  <PagerSettings Position="Bottom" Visible="true" />
  <PagerStyle CssClass="pager" />
  <PagerTemplate>
    <asp:LinkButton ID="btnPreviousPage" class="navbtn prev left"
      runat="server" CommandName="Page" CommandArgument="Prev">
      <span>Newer activities</span></asp:LinkButton>
    <asp:LinkButton ID="btnNextPage" class="navbtn next right"
      runat="server" CommandName="Page" CommandArgument="Next">
      <span>Older activities</span></asp:LinkButton>
  </PagerTemplate>
</asp:GridView>

Я отлаживаю свое приложение и вижу, что код запускается и делает все правильно, но по какой-то причине, когда элемент управления отображается, обе кнопки всегда включены. Что я здесь делаю неправильно?


Ответы:


1

На вашем месте я бы закодировал это так в методе «GridView_PageIndexChanged».

(gvTable.BottomPagerRow.FindControl("btnNextPage") as LinkButton).Enabled = true/false;

Редактировать: Можете ли вы также попробовать добавить сеттер?

set
{
 gvTable.BottomPagerRow.FindControl("btnNextPage") as LinkButton  =value;
}

Редактировать: ОК, мой друг, я наконец-то нашел решение. Может быть не очень элегантно, но работает, я проверял. Есть несколько вещей, о которых нужно позаботиться: 1. У нас есть кнопки «Предыдущая» и «Далее», и мы должны обрабатывать события «По команде» для них, так как мы используем наш собственный шаблон пейджера. связывать данные после того, как мы обработаем наше событие OnCommand.

У меня есть статический List<String>, который я заполнил во время GET случайными строками (любезно предоставлено: http://www.kivela.be/index.php/2007/06/19/how-to-generate-a-random-string-in-c-20/) и привязал их к моей сетке. Здесь вы можете заменить свой собственный источник данных. Кроме того, мы должны изменить индекс страницы сетки вручную в нашем событии OnCommand.

Вот моя сетка aspx/ascx

    <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView_DataBound" 
    AllowPaging="true" PagerSettings-Mode="NextPrevious" PagerSettings-Position="Bottom" PageSize="10"
  OnPageIndexChanged="GridView_PageIndexChanged">
    <PagerSettings Position="Bottom" Visible="true" />
    <PagerStyle CssClass="pager" />
    <PagerTemplate>
      <asp:LinkButton ID="btnPreviousPage" OnCommand="ChangePage"
        runat="server" CommandName="Prev"   Text="prev">
        </asp:LinkButton>
      <asp:LinkButton ID="btnNextPage" OnCommand="ChangePage"
        runat="server" CommandName="Next"  Text="next">
        </asp:LinkButton>
    </PagerTemplate>

  </asp:GridView>

а вот и код

public partial class TestPage : System.Web.UI.Page 
{
    private static Random _random = new Random();
    static List<string> lst = new List<string>();
    protected void Page_Load(object sender, EventArgs e) 
    {


        if (!Page.IsPostBack)
        {
            for (int i = 1; i <= 30; i++)
            {
                lst.Add(RandomString(i));
            }

            GridView1.DataSource = lst;
            GridView1.DataBind();
            SetPageNumbers();
        }

    }

    private void SetPageNumbers()
    {
        if (GridView1.PageIndex == 0)
        {
            (GridView1.BottomPagerRow.FindControl("btnPreviousPage")as LinkButton).Enabled = false;

         }

        if(GridView1.PageIndex ==GridView1.PageCount-1)
        {
            (GridView1.BottomPagerRow.FindControl("btnNextPage") as LinkButton).Enabled = false; 
        }

    }

    protected void ChangePage(object sender, CommandEventArgs e)
    {

        switch (e.CommandName)
        {
            case "Prev":
                GridView1.PageIndex = GridView1.PageIndex - 1;
                break;

            case "Next":
                GridView1.PageIndex = GridView1.PageIndex + 1;
                break;
        }
        GridView1.DataSource = lst;
        GridView1.DataBind();
        SetPageNumbers();
    }


    public static string RandomString(int size)
    {

        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < size; i++)
        {

            //26 letters in the alfabet, ascii + 65 for the capital letters
            builder.Append(Convert.ToChar(Convert.ToInt32(Math.Floor(26 * _random.NextDouble() + 65))));

        }
        return builder.ToString();

    }


}

Надеюсь это поможет

19.12.2009
  • Интересно, правда код не пробовал. Раньше я устанавливал его так, как я упоминал ранее. Попробуй это ? 19.12.2009
  • Можете ли вы опубликовать свой код (aspx/ascx) для вашей сетки? Дай мне взглянуть. Кроме того, вы снова привязываете данные к своей сетке после разбиения на страницы? 19.12.2009
  • @Ram: я привязываю данные к GridView только один раз, и это в OnLoad (если !IsPostBack). Я добавил ascx к вопросу. 19.12.2009
  • Большое спасибо, Рам, я бы дал тебе 10 раз, если бы мог, за это большое усилие. Грустно, однако, что мы не можем решить проблему с OnPageIndexChanged. :( 20.12.2009

  • 2

    Есть ли шанс, что ваш CSS устанавливает свойство enable?

    Я продублировал ваш код без CSS, и у меня он отлично работает.

    Как насчет того, чтобы опубликовать свой css?

    20.12.2009
  • Извините, но я уверен, что проблема здесь не в CSS. 20.12.2009
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..