Home Articles

如何使用LinkButton删除记录并刷新表?

Asked
Viewed 486 times
0

我有一个HTML表格,用于在用户输入患者代码后显示数据库中的一组记录,或者在患者代码通过Querystring传递时在页面加载期间显示 . 每个数据行都有一个动态创建的删除链接按钮 .

我想删除后刷新表格 . 但是,每当单击链接按钮时,它将回发并且除非我重新加载数据,否则将清除所有记录 . 如果我在删除后再次重新加载数据,将会有2次数据获取,表行将加倍 .

表格的前两行在ASPX上定义,以便于样式化 . 如果我在获取数据时清除了表,则第一行也将被清除 . 我在同一个方式创建的不同页面上有另外8个表,因此我宁愿找到其他解决方案,而不是从后面的代码中定义和设置行 .

任何帮助将不胜感激 .

我使用的代码如下:

ASPX

<body>
    <form id="form1" runat="server">
    <div>
    <asp:Label ID="lblPatientCode" runat="server" Text="Patient Code : "></asp:Label>&nbsp; 
    <asp:TextBox ID="txtPatientCode" runat="server"></asp:TextBox>
    &nbsp;
    <asp:Button ID="btnFind" runat="server" name="Date" Text="Find" Width="90" CssClass="ButtonNormal" />
    

<table id="tblDoctorInformation" class="PatientDetailsTable" runat="server"> <tr><td colspan="2">DOCTOR INFORMATION</td></tr> <tr> <td>Doctor In Charge</td> <td>&nbsp;</td> </tr> </table> </div> </form> </body>

代码背后:

Protected PM As New PatientManagement.Common

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        GetPatient()
    Else
        If txtPatientCode.Text <> "" Then
            GetPatient()
        End If
    End If
End Sub

Private Sub GetPatient()
    Dim sPatientCode As String = ""

    If IsPostBack Then
        sPatientCode = Trim(txtPatientCode.Text)
    Else
        sPatientCode = Trim(Page.Request.QueryString("PatientCode"))
    End If

    If sPatientCode <> "" Then
        Dim dr As SqlDataReader
        dr = PM.ExecuteReader("SELECT LOGID,DOCTORNAME FROM PMV_DOCTORINCHARGE WHERE PATIENTCODE='" & sPatientCode & "'")

        If dr.HasRows Then
            Do While dr.Read
                Dim tRow As New HtmlTableRow
                Dim tCellDoctorName As New HtmlTableCell
                Dim tCellModifyLink As New HtmlTableCell
                Dim lb As New LinkButton

                'Doctor Name
                tCellDoctorName.InnerHtml = PM.GetString_TableCell(dr("DoctorName"))
                tRow.Cells.Add(tCellDoctorName)

                'Delete links
                lb.Text = "Delete"
                lb.Attributes.Add("AutoPostBack", False)
                lb.CommandArgument = dr("LogID").ToString()
                AddHandler lb.Click, AddressOf DeleteRecord
                tCellModifyLink.Controls.Add(lb)
                tCellModifyLink.Align = "Center"
                tRow.Cells.Add(tCellModifyLink)

                tblDoctorInformation.Rows.Add(tRow)
            Loop
        End If
    End If
End Sub

Private Sub btnFind_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFind.Click
    GetPatient()
End Sub

Protected Sub DeleteRecord(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim lbNew As New LinkButton
    Dim sResult As String = ""
    Dim bResult As Boolean
    lbNew = sender

    bResult = PM.DeleteMultiRecord(lbNew.CommandArgument, lbNew.CommandName, Session.Item("UserID"), sResult)
    If Not bResult Then
        MsgBox(sResult, MsgBoxStyle.OkOnly, "Deletion was not successful")
    Else
        GetPatient()
    End If
End Sub

2 Answers

  • 1

    我已经四处搜索,似乎动态处理程序最好在 PageInit 期间声明 . 对于我的情况,由于链接按钮控件需要在相应的数据行上携带一些值,似乎我无法避免调用 GetPatient 来创建控件 .

    为了继续解决这个问题,我使用Javascript做了一个解决方法 . 我在ASPX页面上创建了一个 hidLogID 隐藏字段 . 我将链接按钮更改为 <a> 控件并调用传递 dr("LogID") 的javascript函数 . javascript函数会将值赋给 hidLogID 并提交页面 . 当 hidLogID 值不为空时, PageLoad 将调用 DeleteRecord() . hidLogID 的值将在 DeleteRecord() 上清除 .

    谢谢你的帮助!

  • 0

    在删除记录之前,尝试在文本框中放置 PatientID 并删除记录,然后表格将显示与TextBox输入匹配的记录 .

    问题是使用 PageLoad() 方法,如果TextBox为空且它是回发,则不会调用 GetPatient() 方法 . 所以尝试修改 PageLoad() 方法 .

    最好在 PageLoad() 中删除IsPostBack条件 .

Related