0

ユーザーが患者コードを入力した後、または患者コードがクエリ文字列を介して渡されるページの読み込み中に、データベースからのレコードのセットを表示するHTMLテーブルがあります。各データ行には、動的に作成される[削除]リンクボタンがあります。

削除後にテーブルを更新してもらいたいのですが。ただし、リンクボタンをクリックすると、ポストバックされ、データをリロードしない限り、すべてのレコードが消去されます。削除後にデータを再度リロードすると、データのフェッチが2回行われ、テーブルの行が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を削除してみてください。そうすると、テーブルはテキストボックス入力と一致するレコードを表示します。

問題はPageLoad()メソッドにあります。TextBoxが空でポストバックの場合、GetPatient()メソッドは呼び出されません。PageLoad()したがって、メソッドを変更してみてください。

のIsPostBack条件を削除することをお勧めしPageLoad()ます。

于 2012-11-19T10:22:40.207 に答える
0

私は周りを検索しましたが、動的ハンドラーはの間に宣言するのが最善のようPageInitです。GetPatient私の場合、リンクボタンコントロールはそれぞれのデータ行にいくつかの値を保持する必要があるため、コントロールを作成するために呼び出すことを避けられないようです。

この問題を進めるために、Javascriptを使用して回避策を実行しました。hidLogIDASPXページに非表示フィールドを作成しました。リンクボタンを<a>コントロールに変更し、を渡してjavascript関数を呼び出しましたdr("LogID")。javascript関数は、ページに値を割り当ててhidLogID送信します。値が空白でない場合PageLoadに呼び出します。の値はでクリアされます。DeleteRecord()hidLogIDhidLogIDDeleteRecord()

助けてくれてありがとう!

于 2012-11-20T07:18:34.390 に答える