Public Sub Table() Dim Connection As MySqlConnection Dim DataAdapter As MySqlDataAdapter Dim Command As MySqlCommand Connection = New MySqlConnection("server=localhost; userid=root; database=setting;") Command = New MySqlCommand("Select * FROM table", Connection) DataAdapter = New MySqlDataAdapter(Command) Dim DataTable As New DataSet DataAdapter.Fill(DataTable) Ddlname.DataSource = DataTable Ddlname.DataTextField = "Name" Ddlname.DataValueField = "Name" Ddlname.DataBind() End Sub
P粉8839734812023-09-08 00:04:54
您沒有展示您的標記,但請記住,任何按鈕點擊、具有自動回發的控製或頁面上的任何事件觸發都會重新運行頁面加載事件。
因此,理論上,即使只是一個簡單的按鈕點擊,也可能會重新運行載入組合框的程式碼。因此,每個事件,每次點擊都可能會再次新增或載入組合框。
因此,幾乎每個頁面的設計模式都是只載入一次網格、列錶框、下拉框等。
因此,您的程式碼應該如下所示:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then LoadTable() End If End Sub Public Sub LoadTable() Using Connection As New MySqlConnection("server=localhost; userid=root; database=setting;") Using Command As New MySqlCommand("SELECT * from table", Connection) Connection.Open Dim MyTable As New DataTable MyTable.Load(Command.ExecuteReader) Ddlname.DataSource = DataTable Ddlname.DataTextField = "Name" Ddlname.DataValueField = "Name" Ddlname.DataBind() End Using End Using End Sub
因此,請確保您的頁面載入程式碼具有非常重要的 If Not IsPostBack,這樣您才能真正只載入 執行一次載入組合方塊的程式碼。
因此,這個「是回發」測試?你的99%頁面都會這樣運作。我經常認為asp.net頁面應該有一個“firstLoad”事件,因為頁面加載每次都會觸發,對於任何按鈕和觸發頁面回發的任何程式碼都是如此。因此,您的組合框將一次又一次地加載(並增長),因為您每次加載頁面時都會運行加載網格、列錶框或下拉列表的程式碼。因此,請採用、使用和「喜歡」IsPostBack測試-您對所有頁面都要這樣做,而且99%甚至更多的頁面都需要進行這個測試。
事實上,如果您不採用上述建議,您幾乎無法建立任何功能性的網頁。