我有一个按钮,它发送一个会话变量并重定向到另一个页面,其中页面应该读取变量并根据会话变量的字符串显示数据,它可以工作,但除非我刷新页面,否则它不会显示。继续按下按钮:
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();
}
任何帮助表示赞赏!
答案 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.
(我不得不猜测列的类型和大小,相应地进行调整。)