2013-11-12 2 views
-3

Привет, может кто-нибудь помочь Я не знаю, почему мой счетчик в моей кнопке следующий не работает, жалко обо всем остальном коде. Я хочу создать прогон данных в моей базе данных с помощью счетчика. Если есть более простой способ сделать это, это также сработает.C# Мой счетчик не работает

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

попытаться дать ему частный const int type – user1956570

+4

Вам следует попытаться решить проблему. Подготовьте «самый маленький компилируемый пример» с помощью только кнопки и счетчика. – nvoigt

+0

private const int не будет делать, его const, использовать private static int –

ответ

1

В соответствии с ASP. NET Page Life cycle, когда когда-либо у вас есть какая-либо переменная, инициализированная в любом из событий, это может быть загрузка страницы или любое другое событие. эта инициализация специфична для пользователя и будет повторно инициализирована, как только событие будет запущено.

Решение:

Если вы смотрите вперед, чтобы держать счетчик на глобальном уровне (не специфичны для пользователя): переменная приложения Используйте для хранения значения счетчика

Если вы смотрите вперед, чтобы держать счетчик конкретных пользователю (для конкретного пользователя через приложение): используйте сеанс для хранения счетчика Значение

Пожалуйста, дайте мне знать, если вам понадобится образец кода, чтобы я мог предоставить.

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

Спасибо, я думаю, что это то, что я хотел сделать. Но есть ли способ установить значение по умолчанию для инкремента, прежде чем он начнет подсчет? Например, я хочу установить дневной счетчик и каждый день он перемещает начальную точку по умолчанию для всех пользователей на один день вперед каждый день? И затем я хочу установить эту точку в качестве отправной точки для инкремента, которую они могут перемещать с этой точки вперед и назад. – EON689

0

Если вы не храните где-то ваш счетчик будет сброшен после PageLoad или PostBack

Web page are stateless

вы можете использовать ViewState о SessionState

в любом случае, если вы не записывайте инициирование счетчика внутри a

If(!IsPostBack) 
{ 
    iMainCounter = iDefualt; 
} 

каждый раз он будет сброшен

0

Таким образом, вы рассчитывать всегда будет 2, потому что вы установите его в случае загрузки страницы, и событие загрузки страницы для проверки IsPostBack так будет всегда повторно инициализировать равным iDefault , так что вы должны установить iDefault в не отправлять обратно Validation

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

Другая проблема заключается в iMainCounter не установлен статический, так что каждая транзакция будет повторно инициализировать его, поэтому используйте static int iMainCounter = 0

Смежные вопросы