0

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

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

表格的前 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
4

2 回答 2

1

在删除记录之前,尝试PatientID在 Textbox 中放置 a 并删除记录,然后 Table 将显示与 TextBox 输入匹配的记录。

问题在于PageLoad()方法,如果 TextBox 是空的并且它是回发,则GetPatient()不会调用方法。所以尝试修改PageLoad()方法。

最好删除PageLoad().

于 2012-11-19T10:22:40.207 回答
0

我四处搜索,似乎动态处理程序最好在PageInit. 就我而言,由于链接按钮控件需要在相应的数据行上携带一些值,看来我无法避免调用GetPatient来创建控件。

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

谢谢大家的帮助!

于 2012-11-20T07:18:34.390 回答