-3

嗨,任何人都可以帮助我不确定为什么我的按钮中的计数器无法正常工作,对所有其他代码感到抱歉。我想通过使用计数器来构建数据库中的数据。如果有更简单的方法也可以。

public partial class _Default : System.Web.UI.Page
{
    int iDefualt = 2;
    int iMainCounter = 0;
    SqlConnection con1 = new SqlConnection("Data Source=EON;Initial Catalog=DW2;Persist Security Info=True;User ID=Kapow;Password=Kapow");
    DataTable dt = new DataTable();              

    public void Page_Load(object sender, EventArgs e)
    {
        con1.Open();
        SqlDataReader myReader = null;
        //SqlCommand myCommand = new SqlCommand("select * from customer_registration where username='" + Session["username"] + "'", con1);
        SqlCommand myCommand = new SqlCommand(sNavigate(0), con1);
        /SELECT * FROM tblDW2 WHERE [User]='Petrus'
        myReader = myCommand.ExecuteReader();

        while (myReader.Read())
        {
            txtbxDaywords.Text = (myReader["Dayword"].ToString());
        }
        con1.Close();    
        iMainCounter = iDefualt;
        // "Daywords\t" + "\n" + DateTime.Now.ToString();
    }
    public string sNavigate(int iNavNum)
    {
        int iNavigate;

        if (iNavNum != 0)
        {
            iNavigate = iNavNum;    
        }
        else
        {                    
            iNavigate = iDefualt;
        }        
        return "SELECT * FROM (SELECT Dayword, ROW_NUMBER() OVER (ORDER BY Dayword) AS      Rownumber FROM tblDW2 WHERE [User]='Petrus' ) results WHERE results.Rownumber = "+ iNavigate.ToString();
    }    
    protected void btnNext_Click1(object sender, EventArgs e)
    {
        iMainCounter++;    
        con1.Open();
        SqlDataReader myReader = null;
        SqlCommand myCommand = new SqlCommand(sNavigate(iMainCounter), con1);
        myReader = myCommand.ExecuteReader();    
        while (myReader.Read())
        {
            txtbxDaywords.Text = (myReader["Dayword"].ToString());
        }
        con1.Close();
    }
}
4

3 回答 3

1

根据 ASP.NET 页面生命周期,当您在任何事件中初始化任何变量时,可能是页面加载或任何其他事件。该初始化是特定于用户的,一旦事件被触发,就会重新初始化。

解决方案:

如果您希望全局保存计数器(不特定于用户):使用应用程序变量保存计数器值

如果您期待持有特定于用户的计数器(针对整个应用程序中的特定用户):使用 Session 来保存计数器值

如果您需要示例代码,请告诉我,以便我提供。

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Session["Incrementer"] == null)
        {
            Session["Incrementer"] = "1";
        }
        else
        {
            int incrementer = Convert.ToInt32(Session["incrementer"].ToString()) + 1;
            Session["incrementer"] = incrementer.ToString();
        }
        Label1.Text = Session["incrementer"].ToString();
    }
}
于 2013-11-12T11:40:15.250 回答
0

这样,您的计数将始终为 2,因为您在页面加载事件中设置了它,并且在页面加载事件中检查了 Ispostback,因此它将始终重新初始化为等于 iDefault。所以你应该将 iDefault 设置为不回发验证

if(!Page.IsPostBack)
{
   iMainCounter = iDefault;
}

另一个问题是iMainCounter没有设置为静态,所以每个事务都会重新初始化它,所以使用static int iMainCounter = 0

于 2013-11-12T11:26:03.810 回答
0

如果您没有将计数器存储在某个地方,它将在 aPageLoad或 a后重置PostBack

网页是无状态的

你可以使用ViewState o SessionState

无论如何,如果您不将计数器初始化放在

If(!IsPostBack)
{
    iMainCounter = iDefualt; 
}

每次都会重置

于 2013-11-12T11:19:00.840 回答