Все строки GridView выбираются при загрузке страницы

protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(GridView2, "Select$" + e.Row.RowIndex);
        e.Row.ToolTip = "Click to select this row.";
    }
}

По сути, когда я обновляю страницу каждый раз, когда код внутри ^ Gets срабатывает, я пытаюсь сделать строки внутри моего представления сетки доступными для кликов, чтобы отобразить новую страницу с информацией об этой строке. но по какой-то причине при загрузке страницы он срабатывает для каждой отдельной строки.

Теперь я попробовал использовать! IsPostBack при загрузке страницы, проблема в том, что он предотвращает рендеринг страниц gridview> 2. Я также дошел до того, что пара операторов if предотвратила проблему, но потребовалось два щелчка мыши, чтобы событие сработало, поэтому я знаю, что делаю что-то неправильно, и надеюсь, что кто-то может помочь. просто собираюсь включить мой aspx и код C#, если кто-то может помочь, это будет очень признательно.

<asp:GridView ID = "GridView2" CssClass = "mydatagrid" PagerStyle-CssClass = "Gridpager" HeaderStyle-CssClass = "Gridheader" RowStyle-CssClass = "Gridrows" 
    runat = "server" AutoGenerateColumns = "false" AllowPaging = "true" OnRowDataBound = "GridView2_RowDataBound" OnPageIndexChanging = "GridView2_PageIndexChanging" 
    PageSize = "13"  width = "100%" >
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HiddenField ID = "hdnIndex" runat = "server"
                    Value='<%# Eval("RecordID") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField = "Certificate" HeaderText = "Number"   />
        <asp:BoundField DataField = "Company_Name" HeaderText = "Bank Name"  />
        <asp:BoundField DataField = "Phone1" HeaderText = "Phone"  />
        <asp:BoundField DataField = "Address_Line_1" HeaderText = "Street Address"  />
        <asp:BoundField DataField = "City" HeaderText = "City"  />

        <asp:BoundField DataField = "State" HeaderText = "State"  />
    </Columns>
    <PagerSettings  mode = "NumericFirstLast" FirstPageText = "First" PreviousPageText = "Previous" NextPageText = "Next" LastPageText = "Last" />
</asp:GridView>

И Page_Load

protected void Page_Load(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection();
    conn.ConnectionString = ConnectionStringGlobal;
    conn.Open();
    string query = "SELECT * FROM Clients";
    SqlCommand cmd = new SqlCommand(query, conn);

    DataTable dt = new DataTable();
    dt.Load(cmd.ExecuteReader());
    conn.Close();

    GridView2.DataSource = dt;
    GridView2.DataBind();
}

Наконец, код разбивки на страницы:

protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView2.PageIndex = e.NewPageIndex;
    GridView2.DataBind();
}

а вот код для щелчка по строке

protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // Attaching one onclick event for the entire row, so that it will
        // fire SelectedIndexChanged, while we click anywhere on the row.
        e.Row.Attributes["onclick"] =
          ClientScript.GetPostBackClientHyperlink(this.GridView2, "Select$" + e.Row.RowIndex);

    }
    Console.WriteLine("");
}

Не могли бы вы вставить свое событие Page_Load() из своего кода, пожалуйста? На самом деле, было бы здорово увидеть полный код, чтобы убедиться, почему нумерация страниц тоже не работает.

Santiago quits SO 04.10.2018 17:32

@ Сантьяго Трехо, вот и все. Я пробовал использовать аргумент! IsPostBack, но, похоже, из-за этого моя таблица не сгенерировала первую страницу. Спасибо за ваше время и помощь. что касается всего кода, то это почти все, за исключением моего импорта.

Logan Richardson 04.10.2018 17:35

Проверьте мой ответ ниже, пожалуйста.

Santiago quits SO 04.10.2018 18:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
176
1

Ответы 1

GridView загружается каждый раз, когда страница обновляется или есть PostBack, поэтому можно загружать данные только тогда, когда страница загружается в первый раз, также мы сохраняем результаты запроса в переменную Session для дальнейшего использования в событии PageIndexChanged :

protected void Page_Load(object sender, EventArgs e)
{
    if ( !Page.IsPostBack )
    {
        LoadData();
    }
}

protected void LoadData()
{
    SqlConnection conn = new SqlConnection();
    conn.ConnectionString = ConnectionStringGlobal;
    conn.Open();
    string query = "SELECT * FROM Clients";
    SqlCommand cmd = new SqlCommand(query, conn);

    DataTable dt = new DataTable();
    dt.Load(cmd.ExecuteReader());
    conn.Close();

    GridView2.DataSource = dt;
    GridView2.DataBind();   

    // Save into a session variable for later load on pagination.
    Session.Add("tmp_dt",dt);
}

Теперь нам нужно также загрузить данные о событии GridView2_PageIndexChanging, чтобы пагинация работала:

protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e)
{       
    // Load the data previously saved into a session variable.
    // You might want to read the database instead.
    DataTable dt = (DataTable) Session["tmp_dt"];
    this.GridView2.DataSource = dt;

    // Change the page index before databind. This differs from the LoadData() method.
    GridView2.PageIndex = e.NewPageIndex;
    GridView2.DataBind();
}

И в вашем коде ASPX добавьте свойство AllowPaging=True в элемент управления GridView2.

Это возвращает ошибку в отношении Session ["tmp_dt"], сообщает мне, что я не могу неявно преобразовать тип объекта в datatable. Спасибо за любую помощь, которую вы можете оказать

Logan Richardson 04.10.2018 18:40

Попробуй просто dt = Session["tmp_dt"];

Santiago quits SO 04.10.2018 18:43

Я пробую, как вы перечислили выше, слово в слово. Все еще дает мне эту ошибку.

Logan Richardson 04.10.2018 18:45

Хорошо, я вижу ошибку, вместо DataTable dt = New DataTable; должен быть DataTable dt = DataTable;. Я обновлю ответ

Santiago quits SO 04.10.2018 18:47

Я знаю, что я, вероятно, не самый резкий, но все равно возвращаю ту же ошибку, что и выше, и теперь Datatable dt = DataTable; возвращает ошибку типа "datatable - это тип, но используется как переменная". еще раз спасибо за работу со мной.

Logan Richardson 04.10.2018 18:52

Теперь это выглядит потрясающе, однако при загрузке или перезагрузке страницы вызывается каждая строка. и, таким образом, функция, которую я с ней связал, открывает 13 браузеров. Я приложу приведенный выше код для всех, кто может взглянуть на него.

Logan Richardson 04.10.2018 19:05

Извините, я не понимаю, чего вы пытаетесь достичь на мероприятии RowDataBound. Не могли бы вы объяснить? Спасибо

Santiago quits SO 04.10.2018 22:03

Другие вопросы по теме