私は、UpdatePanel内にドロップダウンリスト、2つのボタン、2つのリストボックスを持つフォームを持っています。ドロップダウンリストとリストボックスはすべてSqlDatasourcesにバインドされています。ASP.NET 4 - UpdatePanelはリストボックスを更新しません
ドロップダウンリストでは、あなたの部門を選択できます。
最初のリストボックスには、部門から選択したジョブのリストが表示されます。
2番目のリストボックスには、これらの項目の逆のリストが表示されます。
1番目のリストボックスから項目が削除されると、2番目のリストボックスに表示されます。
2番目のリストボックスから項目が削除されると、それは、この機能を使用すると、追加と削除ボタンなどのページ機能であなたの部署
ザ・から2つのボタンが仕事をしている追加および削除することができます
...第一リストボックスに表示されるはずです。リストボックスが確実に更新されないことを除いて、すべてが機能しています。データ自体はデータベースで更新され、リフレッシュ(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>
2つのボタンのクリックイベントのコードは以下の通りです:
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
私が追加またはジョブを削除すると、私は最後の項目を選択し、リストボックスには、1つであるようにそれは感じています更新されません。
また、ドロップダウンリストの自動ポストバックをTrueに設定せずにリストボックスを更新するためのドロップダウンリストを取得できません。
更新:私が思いついた醜いバンドの修正は、listbox.items.clear()メソッドを使用して、各リストボックスのデータを再バインドすることです。
非同期ポストバックのサーバーサイドコードを追加できますか? – Becuzz
あなたがUpdatePanelと結婚していないなら、私はjavascript/jQueryとウェブメソッドを使ってやってみることをお勧めします。 私はいつもASPアップデートパネルで頭痛がありました。 – Dan
@Becuzz非同期ポストバック用のサーバーサイドハンドラは、私の理解からScriptManagerです。 asp:ScriptManager> –
Lucretius