UpdatePanel 내에 드롭 다운 목록, 두 개의 단추 및 두 개의 목록 상자가있는 양식이 있습니다. 드롭 다운 목록 및 목록 상자는 모두 SqlDatasources에 바인딩됩니다.ASP.NET 4 - UpdatePanel이 목록 상자를 업데이트하지 않습니다.
드롭 다운 목록을 통해 부서를 선택할 수 있습니다.
첫 번째 목록 상자는 부서에서 선택한 항목과 관련된 작업 목록을 표시합니다.
두 번째 목록 상자에는 해당 항목의 역 목록이 표시됩니다.
첫 번째 목록 상자에서 항목을 제거하면 두 번째 목록 상자에 항목이 표시됩니다 ...
두 번째 목록 상자에서 항목을 제거하면 해당 항목이 두 번째 목록 상자에 표시됩니다. 그것은이 기능을 사용하면 추가 및 제거 버튼과 페이지 기능에 부서
로부터 두 개의 버튼을 작업입니다 추가하고 제거 할 수 있습니다
... 1 목록 상자에 표시해야한다. 목록 상자가 안정적으로 업데이트되지 않는 것을 제외하고는 모두 작동합니다. 데이터 자체가 데이터베이스에서 업데이트되고 새로 고침 (F5)되면 올바르게 표시됩니다.
<asp:ScriptManager ID="smgrDeptsJobs" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="uPanelDeptsJobs" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddlDepartments" runat="server"
DataSourceID="sqldsDepartments" DataTextField="Department"
DataValueField="DeptID" Width="150px" AutoPostBack="True">
</asp:DropDownList>
<asp:ListBox ID="lstJobsIn" runat="server" DataSourceID="sqldsJobsIn"
DataTextField="JobName" DataValueField="JobID" height="156px"
width="220px">
</asp:ListBox>
<asp:Button ID="btnAddJob" runat="server" Text="<<" Width="70px"
CausesValidation="False" />
<asp:Button ID="btnRemoveJob" runat="server" Text=">>" Width="70px"
CausesValidation="False" />
<asp:ListBox ID="lstJobsOut" runat="server" DataSourceID="sqldsJobsOut"
DataTextField="JobName" DataValueField="JobID" height="156px"
width="220px">
</asp:ListBox>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddlDepartments"
EventName="SelectedIndexChanged" />
<asp:AsyncPostBackTrigger ControlID="btnAddJob" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btnRemoveJob" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
두 개의 버튼 클릭 이벤트에 대한 코드는 다음과 같습니다 :
Protected Sub btnAddJob_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAddJob.Click
Dim sqlJobsDB As New SqlConnection(ConfigurationManager.ConnectionStrings("JobsDB").ConnectionString)
Dim sqlCmdInsert As SqlCommand = sqlJobsDB.CreateCommand()
sqlJobsDB.Open()
sqlCmdInsert.CommandText = _
"INSERT INTO tblDeptsJobs (DeptID, JobID) VALUES " + _
"(@DeptID, @JobID)"
' Declare the data types for the parameters
sqlCmdInsert.Parameters.Add("@DeptID", SqlDbType.TinyInt)
sqlCmdInsert.Parameters.Add("@JobID", SqlDbType.TinyInt)
' Assign the parameters values from the form
sqlCmdInsert.Parameters("@DeptID").Value = ddlDepartments.SelectedValue
sqlCmdInsert.Parameters("@JobID").Value = lstJobsOut.SelectedValue
' Execute the insert Statement
sqlCmdInsert.ExecuteNonQuery()
sqlJobsDB.Close()
End Sub
Protected Sub btnRemoveJob_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRemoveJob.Click
Dim sqlJobsDB As New SqlConnection(ConfigurationManager.ConnectionStrings("JobsDB").ConnectionString)
Dim sqlCmdDelete As SqlCommand = sqlJobsDB.CreateCommand()
sqlJobsDB.Open()
sqlCmdDelete.CommandText = _
"DELETE FROM tblDeptsJobs WHERE tblDeptsJobs.DeptID = @DeptID AND tblDeptsJobs.JobID = @JobID"
' Declare the data types for the parameters
sqlCmdDelete.Parameters.Add("@DeptID", SqlDbType.TinyInt)
sqlCmdDelete.Parameters.Add("@JobID", SqlDbType.TinyInt)
' Assign the parameters values from the form
sqlCmdDelete.Parameters("@DeptID").Value = ddlDepartments.SelectedValue
sqlCmdDelete.Parameters("@JobID").Value = lstJobsIn.SelectedValue
' Execute the insert Statement
sqlCmdDelete.ExecuteNonQuery()
sqlJobsDB.Close()
End Sub
그것은 내가 추가하거나 작업을 제거 할 때 같은 느낌, 내가 마지막에있는 항목을 선택 목록 상자는 하나입니다 그 업데이트되지 않습니다.
또한 드롭 다운 목록의 자동 저장을 True로 설정하지 않고도 목록 상자를 업데이트 할 수있는 드롭 다운 목록을 가져올 수 없습니다.
업데이트 : 내가 겪었던 추악한 bandaid 픽스는 listbox.items.clear() 메소드를 사용하고 각리스트 박스에 대한 데이터를 다시 바인딩하는 것입니다.
비동기 포스트 백을위한 서버 측 코드를 추가 할 수 있습니까? – Becuzz
당신이 UpdatePanel과 결혼하지 않았다면 javascript/jQuery와 웹 메소드로 해보는 것이 좋습니다. 저는 항상 ASP 업데이트 패널로 골머리를 앓 았습니다. – Dan
@Becuzz Async Postbacks의 서버 측 처리기는 제 이해에서 ScriptManager입니다. asp : ScriptManager> –
Lucretius