Команда строки GridView при обратной передаче

1

Мой код С#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public partial class index : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            if (CheckBox1.Checked == false && CheckBox2.Checked == false && CheckBox3.Checked == false && CheckBox4.Checked == false && CheckBox5.Checked == false && RadioButtonList1.SelectedItem == null)
            {
                GridView2.DataSource = SqlDataSource5;
                GridView2.DataBind();
            }
            else
            {
                if (RadioButtonList1.SelectedItem == null)
                {
                    GridView2.DataSource = SqlDataSource4;
                    GridView2.DataBind();
                }
                else
                {
                    GridView2.DataSource = SqlDataSource6;
                    GridView2.DataBind();
                }
            }
        }
    }
    protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "select")
        {
            Response.Redirect("xyz.aspx");
        }
    }
}

Проблема в том, что когда я нажимаю кнопку Button1 для запуска GridView_RowCommand, это не работает с PostBack. Когда я удаляю код из PageLoad, если (IsPostBack) работает нормально. Итак, как я решаю эту проблему. Я использую ASP.NET С# SQL Server 2008.

  • 0
    Почти всегда, когда я вижу, if(IsPostBack) это на самом деле должно быть обработчиком событий. Обработайте соответствующие события. Это сделает код намного более читабельным и обслуживаемым, и, вероятно, также решит эту проблему.
  • 0
    @TimSchmelter, как мне решить эту проблему?
Показать ещё 1 комментарий
Теги:
gridview

1 ответ

1
Лучший ответ

Как отметил Майкл Мур, это связанный с этим вопрос: событие GridView RowCommand не срабатывает

Почти всегда, когда я вижу, if(IsPostBack) должен быть обработчиком событий. Управлять соответствующими событиями. Это сделает код более читабельным и ремонтопригодным и, вероятно, также решает эту проблему.

Поэтому не делайте DataBind в Page_Load при обратной передаче, если вы хотите, чтобы эти события были инициированы. Вместо этого обрабатывайте события в DataBind GridView. Тогда RowCommand.

В этом случае трудно предположить, какие типы событий вы должны обрабатывать, поскольку условия кажутся сложными. Возможно, вам следует добавить еще одну кнопку и применить логику в обработчике щелчка -event. Другим подходом является обработка всех событий всех задействованных элементов управления.

Поэтому пусть все флажки используют один и тот же обработчик событий CheckBox_CheckedChanged и вызывают DataBind из всех других связанных событий управления, например, из RadioButtonList SelectedIndexChanged -event:

protected void CheckBox_CheckedChanged(Object sender, EventArgs e)
{
    DataBind();
}

private void DataBind()
{
    if (CheckBox1.Checked == false && CheckBox2.Checked == false && CheckBox3.Checked == false && CheckBox4.Checked == false && CheckBox5.Checked == false && RadioButtonList1.SelectedItem == null)
    {
        GridView2.DataSource = SqlDataSource5;
        GridView2.DataBind();
    }
    else
    {
        if (RadioButtonList1.SelectedItem == null)
        {
            GridView2.DataSource = SqlDataSource4;
            GridView2.DataBind();
        }
        else
        {
            GridView2.DataSource = SqlDataSource6;
            GridView2.DataBind();
        }
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню