我的C#代码:
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中移除代码if(IsPostBack)它的工作正常。 那我怎么解决这个问题。 我使用的是ASP.Net C#SQL Server 2008。
答案 0 :(得分:2)
迈克尔摩尔指出这是一个相关的问题:GridView RowCommand event not firing
几乎总是当我看到if(IsPostBack)
实际上应该是一个事件处理程序时。处理适当的事件。这将使代码更具可读性和可维护性,并且可能也解决了这个问题。
如果您希望触发事件,请在DataBind
中{@ 1}}进行回发。而是处理Page_Load
DataBind
的事件。然后首先触发GridView
。
在这种情况下,由于条件似乎很复杂,很难说明应该处理哪种类型的事件。也许你应该添加另一个按钮,并在click-event处理程序中应用逻辑。另一种方法是处理所有相关控件的所有事件。
因此,让所有复选框使用相同的事件处理程序RowCommand
并从所有其他相关控件事件中调用CheckBox_CheckedChanged
,例如DataBind
s RadioButtonList
- 事件:
SelectedIndexChanged