Quantcast
Channel: ASP.NET AJAX + Ajax Control Toolkit (ACT)
Viewing all articles
Browse latest Browse all 5678

Dynamically added button click event fire only once!

$
0
0

Hi

Well, it may seem a repetitious and old problem, but I could not find any solution to it. I am writing a web application which has many forms all working fine with AJAX, except one. This form has two query panels and two parts for adding and editing items. One query panel is for searching through existing items and the other is for helping add/edit process. The entire form ASP.NET code is:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Masters/Forms.Master" CodeBehind="EditBrands.aspx.vb" Inherits="PharmaManageWeb.EditBrands" %><asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"><title>ویرایش برندها</title></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="PageContent" runat="server"><asp:ScriptManagerProxy runat="server" ID="PageScriptsProxy"></asp:ScriptManagerProxy><asp:Table runat="server" CssClass="formtable"><asp:TableRow runat="server"><asp:TableCell runat="server"><asp:UpdatePanel runat="server" ID="AddPanel" UpdateMode="Conditional"><ContentTemplate><asp:Table runat="server" ID="AddTable" CssClass="formtable"><asp:TableRow runat="server"><asp:TableCell runat="server" ColumnSpan="2">افزودن برند:
								</asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server">نام:
								</asp:TableCell><asp:TableCell runat="server"><asp:TextBox runat="server" ID="AddName" CssClass="rtlinput" Width="250px"></asp:TextBox></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server">کد ژنریک:
								</asp:TableCell><asp:TableCell runat="server"><asp:TextBox runat="server" ID="AddCode" CssClass="ltrinput" Width="100px"></asp:TextBox></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server">نام ژنریک:
								</asp:TableCell><asp:TableCell runat="server"><asp:TextBox runat="server" ID="AddGName" CssClass="ltrinput" Width="250px" Enabled="false"></asp:TextBox></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server">&nbsp;</asp:TableCell><asp:TableCell runat="server"><asp:Label runat="server" ID="AddErrMsg" ForeColor="Red"></asp:Label></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server">&nbsp;</asp:TableCell><asp:TableCell runat="server" CssClass="buttoncell"><asp:Button runat="server" ID="SubmitAdd" Text="ارسال" OnClick="DoAdd" /></asp:TableCell></asp:TableRow></asp:Table></ContentTemplate></asp:UpdatePanel><br /><asp:UpdatePanel runat="server" ID="EditPanel" UpdateMode="Conditional"><Triggers><asp:AsyncPostBackTrigger ControlID="SubmitAdd" EventName="Click" /></Triggers><ContentTemplate><asp:Table runat="server" ID="EditTable" CssClass="formtable"><asp:TableRow runat="server"><asp:TableCell runat="server" ColumnSpan="2">ویرایش برند:
								</asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server">نام:
								</asp:TableCell><asp:TableCell runat="server"><asp:TextBox runat="server" ID="EditName" CssClass="rtlinput" Width="250px"></asp:TextBox></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server">کد ژنریک:
								</asp:TableCell><asp:TableCell runat="server"><asp:TextBox runat="server" ID="EditCode" CssClass="ltrinput" Width="100px"></asp:TextBox></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server">نام ژنریک:
								</asp:TableCell><asp:TableCell runat="server"><asp:TextBox runat="server" ID="EditGName" CssClass="ltrinput" Width="250px" Enabled="false"></asp:TextBox></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server">&nbsp;</asp:TableCell><asp:TableCell runat="server"><asp:Label runat="server" ID="EditErrMsg" ForeColor="Red"></asp:Label></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server">&nbsp;</asp:TableCell><asp:TableCell runat="server" CssClass="buttoncell"><asp:Button runat="server" ID="SubmitEdit" Text="ارسال" OnClick="DoEdit" Enabled="false" /></asp:TableCell></asp:TableRow></asp:Table></ContentTemplate></asp:UpdatePanel><br /><asp:UpdatePanel runat="server" ID="QueryPanel" UpdateMode="Conditional"><ContentTemplate><asp:Table runat="server" ID="QueryTable" CssClass="formtable"><asp:TableRow runat="server"><asp:TableCell runat="server" ColumnSpan="3">جستجوی برندها:
								</asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server" Width="20px">نام:
								</asp:TableCell><asp:TableCell runat="server" Width="150px"><asp:TextBox runat="server" ID="QueryName" CssClass="rtlinput" Width="250px"></asp:TextBox></asp:TableCell><asp:TableCell runat="server" CssClass="buttoncell"><asp:Button runat="server" ID="SubmitQuery" Text="ارسال" OnClick="DoQuery" /></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server" ColumnSpan="3"><asp:Label runat="server" ID="QueryErrMsg" ForeColor="Red"></asp:Label></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server" ColumnSpan="3"><asp:Table runat="server" ID="QueryResults" CssClass="resulttable"></asp:Table></asp:TableCell></asp:TableRow></asp:Table></ContentTemplate></asp:UpdatePanel></asp:TableCell><asp:TableCell runat="server">انتخاب کدهای ژنریک:<br /><br /><asp:UpdatePanel runat="server" ID="GQueryPanel" UpdateMode="Conditional"><ContentTemplate><asp:Table runat="server" ID="GQueryTable" CssClass="formtable"><asp:TableRow runat="server"><asp:TableCell runat="server" ColumnSpan="3">جستجوی کدها:
								</asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server" Width="20px">نام:
								</asp:TableCell><asp:TableCell runat="server" Width="150px"><asp:TextBox runat="server" ID="GQueryName" CssClass="ltrinput" Width="250px"></asp:TextBox></asp:TableCell><asp:TableCell runat="server" CssClass="buttoncell"><asp:Button runat="server" ID="GSubmitQuery" Text="ارسال" OnClick="DoGQuery" /></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server" ColumnSpan="3"><asp:Label runat="server" ID="GQueryErrMsg" ForeColor="Red"></asp:Label></asp:TableCell></asp:TableRow><asp:TableRow runat="server"><asp:TableCell runat="server" ColumnSpan="3"><asp:Table runat="server" ID="GQueryResults" CssClass="resulttable"></asp:Table></asp:TableCell></asp:TableRow></asp:Table></ContentTemplate></asp:UpdatePanel></asp:TableCell></asp:TableRow></asp:Table></asp:Content>

And the code behind:

Public Class EditBrands
    Inherits System.Web.UI.Page

	Private Sub Re_CreateQueryResults(ByVal dbc As SqlConnection)
		Dim qry As Base.Brands = Base.Brand.QueryBrands(dbc, Session("BrandQueryVal"))
		Dim i As Integer
		Dim tr As TableRow
		Dim tc As TableCell
		Dim bt As Button

		QueryResults.Rows.Clear()
		tr = New TableRow
		tc = New TableCell
		tc.Text = "شناسه"
		tc.CssClass = "resulttableordercol"
		tr.Cells.Add(tc)
		tc = New TableCell
		tc.Text = "نام"
		tc.CssClass = "resulttabledatacol"
		tr.Cells.Add(tc)
		tc = New TableCell
		tc.Text = "ویرایش"
		tc.CssClass = "resulttableordercol"
		tr.Cells.Add(tc)
		QueryResults.Rows.Add(tr)
		For i = 0 To qry.Count - 1
			tr = New TableRow
			tc = New TableCell
			tc.Text = qry(i).ID
			tc.CssClass = "resulttableordercol"
			tr.Cells.Add(tc)
			tc = New TableCell
			tc.Text = qry(i).Name
			tc.CssClass = "resulttabledatacol"
			tr.Cells.Add(tc)
			tc = New TableCell
			bt = New Button
			bt.Text = "ویرایش"
			bt.ID = "SubmitEdit" & qry(i).ID
			AddHandler bt.Click, AddressOf SubmitForEdit
			tc.Controls.Add(bt)
			tc.CssClass = "resulttableordercol"
			tr.Cells.Add(tc)
			QueryResults.Rows.Add(tr)
		Next
		If qry.Count = 0 Then
			QueryErrMsg.Text = SystemSys.SysMan.GetSystemMessage(dbc, "NOTHINGFOUND")
			QueryResults.Rows.Clear()
		End If
	End Sub

	Private Sub Re_CreateGQueryResults(ByVal dbc As SqlConnection)
		Dim qry As StatBookManager.GenericNames = StatBookManager.GenericName.QueryGenericNames(dbc, Session("GenericQueryVal3"))
		Dim i As Integer
		Dim tr As TableRow
		Dim tc As TableCell
		Dim bt As Button

		GQueryResults.Rows.Clear()
		tr = New TableRow
		tc = New TableCell
		tc.Text = "کد"
		tc.CssClass = "resulttableordercol"
		tr.Cells.Add(tc)
		tc = New TableCell
		tc.Text = "نام"
		tc.CssClass = "resulttabledatacol"
		tr.Cells.Add(tc)
		tc = New TableCell
		tc.Text = "انتخاب برای"
		tc.ColumnSpan = 2
		tc.CssClass = "resulttableordercol"
		tr.Cells.Add(tc)
		GQueryResults.Rows.Add(tr)
		For i = 0 To qry.Count - 1
			tr = New TableRow
			tc = New TableCell
			tc.Text = qry(i).Code
			tc.CssClass = "resulttableordercol"
			tr.Cells.Add(tc)
			tc = New TableCell
			tc.Text = qry(i).Name
			tc.CssClass = "resulttabledatacolltr"
			tr.Cells.Add(tc)
			tc = New TableCell
			bt = New Button
			bt.Text = "افزودن"
			bt.ID = "SubmitForAdd" & qry(i).ID
			AddHandler bt.Click, AddressOf SubmitGForAdd
			ScriptManager.GetCurrent(Me.Page).RegisterAsyncPostBackControl(bt)
			tc.Controls.Add(bt)
			tc.CssClass = "resulttableordercol"
			tr.Cells.Add(tc)
			tc = New TableCell
			bt = New Button
			bt.Text = "ویرایش"
			bt.ID = "SubmitForEdit" & qry(i).ID
			AddHandler bt.Click, AddressOf SubmitGForEdit
			ScriptManager.GetCurrent(Me.Page).RegisterAsyncPostBackControl(bt)
			tc.Controls.Add(bt)
			tc.CssClass = "resulttableordercol"
			tr.Cells.Add(tc)
			GQueryResults.Rows.Add(tr)
		Next
		If qry.Count = 0 Then
			GQueryErrMsg.Text = SystemSys.SysMan.GetSystemMessage(dbc, "NOTHINGFOUND")
			GQueryResults.Rows.Clear()
		Else
			GQueryErrMsg.Text = ""
		End If
	End Sub

	Protected Sub DoGQuery(ByVal sender As Object, ByVal e As EventArgs)
		Dim dbc As SqlConnection = Connectivity.GetConnectionToDB(Session("DatabaseName"))

		GQueryErrMsg.Text = ""
		If GQueryName.Text.Trim = "" Then
			GQueryErrMsg.Text = SystemSys.SysMan.GetSystemMessage(dbc, "NOGENERICNAME")
			dbc.Close()
			Exit Sub
		End If

		Session("GenericQueryVal3") = GQueryName.Text
		Re_CreateGQueryResults(dbc)
		dbc.Close()
	End Sub

	Protected Sub SubmitGForAdd(ByVal sender As Object, ByVal e As EventArgs)
		MsgBox("A")
		Dim dbc As SqlConnection = Connectivity.GetConnectionToDB(Session("DatabaseName"))
		Dim itm As New StatBookManager.GenericName(dbc, Val(CType(sender, Button).ID.Substring(12)), StatBookManager.GenericName.IdentifyBy.ID)

		AddCode.Text = itm.Code
		AddGName.Text = itm.Name
		AddPanel.Update()
		dbc.Close()
	End Sub

	Protected Sub SubmitGForEdit(ByVal sender As Object, ByVal e As EventArgs)
		MsgBox("E")
		Dim dbc As SqlConnection = Connectivity.GetConnectionToDB(Session("DatabaseName"))
		Dim itm As New StatBookManager.GenericName(dbc, Val(CType(sender, Button).ID.Substring(13)), StatBookManager.GenericName.IdentifyBy.ID)

		EditCode.Text = itm.Code
		EditGName.Text = itm.Name
		EditPanel.Update()
		dbc.Close()
	End Sub

	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
		If Not Page.IsPostBack Then
			If Session("GenericQueryVal3") IsNot Nothing Then
				Session.Remove("GenericQueryVal3")
				Exit Sub
			End If
		End If

		Dim dbc As SqlConnection = Connectivity.GetConnectionToDB(Session("DatabaseName"))

		If Page.IsPostBack AndAlso (Session("BrandQueryVal") IsNot Nothing) AndAlso (AJAXUtils.GetAsyncPostBackControlID(Me.Page, Request).EndsWith("$QueryPanel")) Then
			Re_CreateQueryResults(dbc)
			If QueryName.Text = "" Then QueryName.Text = Session("BrandQueryVal")
		End If
		If Page.IsPostBack AndAlso (Session("GenericQueryVal3") IsNot Nothing) AndAlso (AJAXUtils.GetAsyncPostBackControlID(Me.Page, Request).EndsWith("$GQueryPanel")) Then
			Re_CreateGQueryResults(dbc)
			If GQueryName.Text = "" Then GQueryName.Text = Session("GenericQueryVal3")
		End If
		dbc.Close()
	End Sub

	Protected Sub DoAdd(ByVal sender As Object, ByVal e As EventArgs)
		Dim dbc As SqlConnection = Connectivity.GetConnectionToDB(Session("DatabaseName"))

		AddErrMsg.Text = ""
		If AddName.Text.Trim = "" Then
			AddErrMsg.Text = SystemSys.SysMan.GetSystemMessage(dbc, "NOBRANDNAME")
			dbc.Close()
			Exit Sub
		End If
		If AddCode.Text.Trim = "" Then
			AddErrMsg.Text = SystemSys.SysMan.GetSystemMessage(dbc, "NOGENERICCODE")
			dbc.Close()
			Exit Sub
		End If

		Dim itm As New Base.Brand

		If Not itm.GenericName.Load(dbc, Val(AddCode.Text), StatBookManager.GenericName.IdentifyBy.Code) Then
			AddErrMsg.Text = SystemSys.SysMan.GetSystemMessage(dbc, "GENERICNOTFOUND")
			dbc.Close()
			Exit Sub
		End If

		itm.Name = AddName.Text
		itm.Register(dbc)
		AddName.Text = ""
		AddCode.Text = ""
		AddGName.Text = ""
		EditName.Text = ""
		EditCode.Text = ""
		EditGName.Text = ""
		SubmitEdit.Enabled = False
		dbc.Close()
	End Sub

	Protected Sub DoEdit(ByVal sender As Object, ByVal e As EventArgs)
		Dim dbc As SqlConnection = Connectivity.GetConnectionToDB(Session("DatabaseName"))
		Dim itm As New Base.Brand(dbc, Session("BrandEditID"))

		EditErrMsg.Text = ""
		If EditName.Text.Trim = "" Then
			EditErrMsg.Text = SystemSys.SysMan.GetSystemMessage(dbc, "NOBRANDNAME")
			dbc.Close()
			Exit Sub
		End If
		If EditCode.Text.Trim = "" Then
			EditErrMsg.Text = SystemSys.SysMan.GetSystemMessage(dbc, "NOGENERICCODE")
			dbc.Close()
			Exit Sub
		End If
		If Not itm.GenericName.Load(dbc, Val(EditCode.Text), StatBookManager.GenericName.IdentifyBy.Code) Then
			EditErrMsg.Text = SystemSys.SysMan.GetSystemMessage(dbc, "GENERICNOTFOUND")
			dbc.Close()
			Exit Sub
		End If

		itm.Name = EditName.Text
		itm.Save(dbc)
		EditName.Text = ""
		EditCode.Text = ""
		EditGName.Text = ""
		SubmitEdit.Enabled = False
		Re_CreateQueryResults(dbc)
		QueryPanel.Update()
		dbc.Close()
	End Sub

	Protected Sub DoQuery(ByVal sender As Object, ByVal e As EventArgs)
		Dim dbc As SqlConnection = Connectivity.GetConnectionToDB(Session("DatabaseName"))

		QueryErrMsg.Text = ""
		If QueryName.Text.Trim = "" Then
			QueryErrMsg.Text = SystemSys.SysMan.GetSystemMessage(dbc, "NOBRANDNAME")
			dbc.Close()
			Exit Sub
		End If

		Session("BrandQueryVal") = QueryName.Text
		Re_CreateQueryResults(dbc)
		dbc.Close()
	End Sub

	Protected Sub SubmitForEdit(ByVal sender As Object, ByVal e As EventArgs)
		Dim dbc As SqlConnection = Connectivity.GetConnectionToDB(Session("DatabaseName"))
		Dim itm As New Base.Brand(dbc, Val(CType(sender, Button).ID.Substring(10)))

		Session("BrandEditID") = itm.ID
		EditName.Text = itm.Name
		EditCode.Text = itm.GenericName.Code
		EditGName.Text = itm.GenericName.Name
		SubmitEdit.Enabled = True
		EditPanel.Update()
		Re_CreateQueryResults(dbc)
		dbc.Close()
	End Sub

	Private Sub EditBrands_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
		If Page.IsPostBack AndAlso (Session("GenericQueryVal3") IsNot Nothing) Then
			Dim dbc As SqlConnection = Connectivity.GetConnectionToDB(Session("DatabaseName"))

			Re_CreateGQueryResults(dbc)
			dbc.Close()
		End If
	End Sub
End Class

Dynamic add/edit buttons are added in Re_CreateGQueryResults() subroutine. As you see, I have added two MsgBox statements saying "A" when a dynamic add button is clicked, and "E" when a dynamic edit button is clicked. The problem is exactly here: when I click on a dynamic add button, MsgBox("A") works, but only for the first! Further clicks don't result in any further message boxes (and not in any change in contents of AddName, AddCode, AddGName), and other dynamic edit buttons don't work as well until session expiration (say, with a rebuild on ASP.NET Development Server). A similar behavior happens with first click on dynamic edit buttons (No further message boxes, neither by edit buttons nor add buttons).

Where is the problem?!

Thanks in advance.


Viewing all articles
Browse latest Browse all 5678

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>