2013-05-15 86 views
0

我正在用vb.net創建一個webapp,並且我需要在UpdatePanel內創建一個TextBox,以便在回發後將焦點更改爲另一個文本框。我決定使用一個ViewState來保存一個將在加載時讀取的名字,以知道焦點應該在哪裏(有七個文本框應該像這樣工作),但我不能只做一件工作。 以下是不起作用的最小代碼。ViewState在回發期間不保存值

 Dim g As Integer 
    g = 1 
    ViewState.Add("foco", g) 

這裏是Page_Load。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 


    If Page.IsPostBack Then 
     If ViewState("foco") = 1 Then 
      TextBox1.Focus() 
     End If 
    End If 

End Sub 

回答

0

它看起來像你不增加回發之間的計數器。

If Page.IsPostBack Then 
     If ViewState("foco") = 1 Then 
      TextBox1.Focus() 
     ElseIf ViewState("foco") = 2 Then 
      TextBox2.Focus() 
     ElseIf ViewState("foco") = 3 Then 
      TextBox3.Focus() 
     End If 
     ViewState("foco") = ViewState("foco") + 1 
    Else 
     ViewState.Add("foco", 1) 
    End If 
0

何時向ViewState添加值的代碼被執行?

你是什麼意思的「不工作」?你預期會發生什麼,實際發生了什麼?

在任何情況下,要做到這一點最簡單的方法可能是一個屬性添加到您的網頁是由ViewState的支持,如:

public int FocusIndex 
{ 
    get 
    { 
     object o = ViewState["foco"]; 
     return (o == null) ? -1 : (int) o; 
    } 
    set 
    { 
     ViewState["foco"] = value; 
    } 
} 
+0

這是對一個UpdatePanel一個文本框,按下Enter鍵時,它應該以填補從數據庫中結果的列表,然後保存文本框的數量時,把重點放在回發的回報。我發佈了下面的代碼。 –

0
Protected Sub TextBox7_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox7.TextChanged 
    If TextBox7.Text = "" Then Exit Sub 


    ' ListBox1.Visible = True 


    ListBox1.Items.Clear() 



    Dim con As New Data.OleDb.OleDbConnection("Provider=SQLOLEDB;Data Source=TEST08\AXSQLEXPRESS;Password=Axoft1988;User ID=sa;Initial Catalog=club_independiente") 
    con.Open() 

    'Dim com As New Data.OleDb.OleDbCommand("select * from emCaja where cod_client = '" & TextBox1.Text & "'", con) 
    ' If "" & com.ExecuteScalar() = "" Then 
    Dim com As New Data.OleDb.OleDbCommand 

    com = New Data.OleDb.OleDbCommand("select * from emConceptos where codigo = " & TextBox7.Text, con) 
    com.ExecuteNonQuery() 

    Dim dr As Data.OleDb.OleDbDataReader 
    dr = com.ExecuteReader 

    While dr.Read 
     ListBox1.Items.Add(dr("descripcion")) 
     ListBox1.Items(ListBox1.Items.Count - 1).Value = dr("codigo") 
    End While 
    dr.Close() 

    ' ListBox1.Focus() 

    If ListBox1.Items.Count > 0 Then 
     ListBox1.SelectedIndex = 0 
    End If 
    Dim g As Integer 
    g = 1 
    Session("foco") = g 

End Sub 
0

你在做什麼不起作用因爲page_load方法在TextChanged事件有機會執行之前運行。

試試這個:

  1. 在頁面中添加一個ScriptManager;
  2. 將page_load邏輯放入page_preRender事件中,這會保證觸發textchanged事件;

    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender 
    
        If Page.IsPostBack Then 
         If ViewState("foco") = 1 Then 
          ScriptManager1.SetFocus(TextBox1) 
         End If 
        End If 
    
    End Sub