Мой код С#:
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.
Как отметил Майкл Мур, это связанный с этим вопрос: событие 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();
}
}
}
if(IsPostBack)
это на самом деле должно быть обработчиком событий. Обработайте соответствующие события. Это сделает код намного более читабельным и обслуживаемым, и, вероятно, также решит эту проблему.