【问题标题】:GridView rowcommand on postback回发时的 GridView 行命令
【发布时间】:2014-09-30 09:05:24
【问题描述】:

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

【问题讨论】:

  • 几乎总是当我看到if(IsPostBack) 这实际上应该是一个事件处理程序。处理适当的事件。这将使代码更具可读性和可维护性,并且可能也解决了这个问题。
  • @TimSchmelter 我如何解决这个问题?
  • @TimSchmelter 为什么不发布到your answer to similar question 的链接,这可能会回答这个问题? :)

标签: c# asp.net gridview


【解决方案1】:

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

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

因此,如果您希望触发事件,请不要在回发时 DataBind 中的 Page_Load。而是将事件处理到DataBind GridView。那么RowCommand会首先被触发。

在这种情况下,很难建议您应该处理哪种类型的事件,因为条件似乎很复杂。也许您应该添加另一个按钮并在单击事件处理程序中应用逻辑。另一种方法是处理所有相关控件的所有事件。

所以让所有复选框使用相同的事件处理程序CheckBox_CheckedChanged 并从所有其他相关控件事件(例如来自RadioButtonLists SelectedIndexChanged-事件)调用DataBind

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();
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    相关资源
    最近更新 更多