网格视图中的数据不会显示,直到我刷新页面c#

时间:2016-05-04 18:38:43

标签: c# asp.net session redirect

我有一个按钮,它发送一个会话变量并重定向到另一个页面,其中页面应该读取变量并根据会话变量的字符串显示数据,它可以工作,但除非我刷新页面,否则它不会显示。继续按下按钮:

protected void btnJoin_Click(object sender, EventArgs e)
{
    Button lb = (Button)sender;
    GridViewRow row = (GridViewRow)lb.NamingContainer;
    getText1 = row.Cells[1].Text;
    Session["showName"] = getText1;
    Response.Redirect("ViewLeague.aspx");
}

并且继承了ViewLeage.aspx的页面加载:

string SQLName = "SELECT teamname, draftedPlayer1, player1FP, draftedPlayer2, player2FP, draftedPlayer3, player3FP, draftedPlayer4, player4FP, totalFP FROM Drafted_Table WHERE LeagueName = '" + Name2 + " '";

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if (this.Session["showName"] != null)
        {
            Name2 = (String)this.Session["showName"];
        }
    }

编辑:

将数据添加到gridview的地方

private void GetData()
{
    DataTable table = new DataTable();

    // get the connection

    using (SqlConnection conn = new SqlConnection("Data Source= tyler-pc\\sqlexpress; Integrated Security=true; Database=CODFANTASY2"))

    {

        // write the sql statement to execute

        string sql = SQLName;

        // instantiate the command object to fire

        using (SqlCommand cmd = new SqlCommand(sql, conn))

        {

            // get the adapter object and attach the command object to it

            using (SqlDataAdapter ad = new SqlDataAdapter(cmd))

            {

                // fire Fill method to fetch the data and fill into DataTable

                ad.Fill(table);

            }

        }

    }

    // specify the data source for the GridView

    ViewLeagueTable.DataSource = table;

    // bind the data now

    ViewLeagueTable.DataBind();


}

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

我在这里看到的两个问题......

首先,当您执行重定向时:

Response.Redirect("ViewLeague.aspx");

将调用的目标页面(ViewLeague.aspx)上的唯一事件是init / load / etc.事件。单击按钮可能导致重定向,但是没有单击目标页面上的按钮,因此不会使用其他此类处理程序。

因此,为了在页面加载时在网格中显示任何内容,它需要在Page_Load处理程序中发生:

protected void Page_Load(object sender, EventArgs e)
{
    //...
    GetData();
}

第二次,您在为其指定任何内容之前使用该值:

string SQLName = "SELECT teamname, draftedPlayer1, player1FP, draftedPlayer2, player2FP, draftedPlayer3, player3FP, draftedPlayer4, player4FP, totalFP FROM Drafted_Table WHERE LeagueName = '" + Name2 + " '";

// Later...
Name2 = (String)this.Session["showName"];

如果Name2在使用时为空,那么该SQL子句将为:

WHERE LeagueName = ''

因此,如果没有空LeagueName值的记录,则不会显示任何数据。获取值后,需要在查询中设置值。 (你应该使用参数,以避免SQL注入。)

string SQLName = "SELECT teamname, draftedPlayer1, player1FP, draftedPlayer2, player2FP, draftedPlayer3, player3FP, draftedPlayer4, player4FP, totalFP FROM Drafted_Table WHERE LeagueName = @Name";

// Later...
Name2 = (String)this.Session["showName"];

// Later...
var cmd = new SqlCommand(SQLName);
cmd.Parameters.Add("@Name", SqlDataType.VarChar, 25).Value = Name2;
// etc.

(我不得不猜测列的类型和大小,相应地进行调整。)