如何使用LinkBut​​ton删除记录并刷新表?

时间:2012-11-19 09:49:55

标签: asp.net vb.net

我有一个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" />
    <br /><br />

    <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 个答案:

答案 0 :(得分:1)

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

问题在于PageLoad()方法,如果TextBox为空且它是回发,则不会调用GetPatient()方法。因此,请尝试修改PageLoad()方法。

最好删除PageLoad()中的IsPostBack条件。

答案 1 :(得分:0)

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

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

感谢您的帮助!