回发上的GridView rowcommand

时间:2014-09-30 09:05:25

标签: c# asp.net gridview

我的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。

1 个答案:

答案 0 :(得分:2)

迈克尔摩尔指出这是一个相关的问题:GridView RowCommand event not firing

几乎总是当我看到if(IsPostBack)实际上应该是一个事件处理程序时。处理适当的事件。这将使代码更具可读性和可维护性,并且可能也解决了这个问题。

如果您希望触发事件,请在DataBind中{@ 1}}进行回发。而是处理Page_Load DataBind的事件。然后首先触发GridView

在这种情况下,由于条件似乎很复杂,很难说明应该处理哪种类型的事件。也许你应该添加另一个按钮,并在click-event处理程序中应用逻辑。另一种方法是处理所有相关控件的所有事件。

因此,让所有复选框使用相同的事件处理程序RowCommand并从所有其他相关控件事件中调用CheckBox_CheckedChanged,例如DataBind s RadioButtonList - 事件:

SelectedIndexChanged