none
如何清掉 table 裡的欄位值 ? RRS feed

  • 問題

  • 各位先進:

      我有寫一個 sub 將資料以 table 方式顯示,

      但重新 query 一次時, 若值為空白時,

      textbox 都會顯示舊資料,而不會被清掉變成空白,

      我有下 myTable.Rows.Clear() 來清除 table,但還是會出現,

      請問該如何解決這個問題 ?

      謝謝!!

     

        Sub TableData(ByVal strSQL As String)
            Dim connection As New SqlConnection(ConfigurationManager.AppSettings("chinaConnectionString"))
            Dim command As SqlCommand
            Dim dr As SqlDataReader
            Dim row As TableRow
            Dim cell As TableCell
            Dim tb As TextBox
            Dim cb As CheckBox
            Dim hl As HyperLink
            Dim i As Integer

            'clear table
            myTable.Rows.Clear()

            i = 0
            If strSQL <> "" Then

                connection.Open()
                command = New SqlCommand(strSQL, connection)
                dr = command.ExecuteReader

                While dr.Read()
                    i = i + 1
                    row = New TableRow()

                    cell = New TableCell()  'field1
                    cell.Width = "120"
                    hl = New HyperLink()
                    hl.Text = dr.Item("PID").ToString
                    hl.Target = "_blank"
                    hl.NavigateUrl = "Show_PDT.aspx?oid=" & dr.Item("POID").ToString
                    cell.Controls.Add(hl)
                    row.Cells.Add(cell)

                    cell = New TableCell()  'field9
                    cell.Width = "70"
                    tb = New TextBox()
                    tb.ID = "sunit" & i
                    tb.Width = "40"
                    If TextBoxKind.Text = "data" Then
                        tb.Text = dr.Item("UNIT").ToString
                    Else
                        tb.Text = ""
                    End If
                    tb.AutoPostBack = False
                    tb.Attributes.Add("onkeypress", "return  checkEnter();")
                    'MsgBox("unit= " & dr.Item("UNIT").ToString)
                    cell.Controls.Add(tb)
                    row.Cells.Add(cell)

                    cell = New TableCell()  'field8
                    cell.Width = "100"
                    tb = New TextBox()
                    tb.ID = "sprice" & i
                    tb.Width = "70"
                    If TextBoxKind.Text = "data" Then
                        tb.Text = dr.Item("PRICE").ToString
                    Else
                        tb.Text = ""
                    End If
                    tb.AutoPostBack = False
                    tb.Attributes.Add("onkeypress", "return  checkEnter();")
                    cell.Controls.Add(tb)
                    row.Cells.Add(cell)

                    cell = New TableCell()  'field9
                    cell.Text = dr.Item("IFLAG").ToString
                    cell.Width = "80"
                    row.Cells.Add(cell)

                    myTable.Rows.Add(row)

                End While
                dr.Close()
                connection.Close()

            End If
            TextBoxI.Text = i

        End Sub

     

    2007年1月3日 上午 09:26

解答

  • 我想我已經看出來你的問題大致上出在哪裡了。不過你在原文中既沒有說明所謂的 Query 指的是什麼,也沒有說明到底是哪個 TextBox 存留舊值,所以不能直接回答你。我只建議你在 Sub TableData(ByVal strSQL As String) 這一行加上中斷點,然後按 F11 一步一步執行,並注意看 VS2005 裡的除錯視窗,觀察各個變數的值。我相信你只要巡迴過一遍就可以馬上發現問題在哪裡。試試吧!

     

    2007年1月18日 上午 05:35

所有回覆

  • 這應該要看你的 SQL 吧,因為看起來好像你的 SQL 執行是有值的。
    2007年1月3日 上午 09:37
    版主
  •  

    SQL 執行後該欄位是沒有值的,

    就是這樣才奇怪,

    且後來, 還寫死

                    If TextBoxKind.Text = "data" Then
                        tb.Text = dr.Item("PRICE").ToString
                    Else
                        tb.Text = ""
                    End If

    明明 msgbox debug 時, tb.Text=""

    但最後顯示時,之前 sql 的舊值又跑出來了~~ =_=

     

    2007年1月4日 上午 09:38
  • 我只看到你的片段,所以無法判定。
    你有在 Page_Load 做什麼處理嗎?
    說不定跑出來的值不是由這支程式產生的。
    2007年1月4日 上午 09:41
    版主
  •  

    Page_Load 是組 sql, 接著就呼叫 TableData ()

     

    Page_Load 程式碼:

        If Not Page.IsPostBack Or TextBoxKind.Text = "data" Then
                TextBoxType.Text = Request("otype")   'new or update
                TextBoxTable.Text = Request("table") ' table name
                TextBoxValue.Text = Request("value") 'dt string or id
                TextBoxTable1.Text = Request("table1") ' PURCHASE or ORDER
                TextBoxValue1.Text = Request("value1") 'PURCHASE or ORDER 的 OSID value
                TextBoxSID.Text = Request("sid") 'PIN or POUT 的 OSID value
                TextBoxKind.Text = "data"

                '組合SQL - 列出採購單或訂單的產品
                If TextBoxTable1.Text = "PURCHASE" Then
                    'strCmd = "select a.OID as AOID,p.* From PURCHASE a,PUE_PDT p Where a.OID=p.MOID and a.ISDEL=0 and a.CID=" & Session("CmpInfo") & " and a.OSID='" & Me.TextBoxValue1.Text & "'"
                    strCmd = "select * from (Select a.OID as AOID,p.*,p.UNIT-p.IFLAG as IUNIT,s.UNIT as SUNIT,pp.PID as PPID From PURCHASE a,PUE_PDT p,PDT_STOCKS s,PRODUCT pp  Where a.OID=p.MOID and p.POID=s.POID and p.POID=pp.OID and a.ISDEL=0 and a.CID=" & Session("CmpInfo") & " and a.OSID='" & Me.TextBoxValue1.Text & "') as A where A.IUNIT >0"
                ElseIf TextBoxTable1.Text = "ORDERDATE" Then
                    'strCmd = "select a.OID as AOID,p.* From ORDERDATE a,ODR_PDT p Where a.OID=p.MOID and a.ISDEL=0 and a.CID=" & Session("CmpInfo") & " and a.OSID='" & Me.TextBoxValue1.Text & "'"
                    strCmd = "select * from (Select a.OID as AOID,p.*,p.UNIT-p.IFLAG as IUNIT,s.UNIT as SUNIT,pp.PID as PPID From ORDERDATE a,ODR_PDT p,PDT_STOCKS s,PRODUCT pp Where a.OID=p.MOID and p.POID=s.POID and p.POID=pp.OID and a.ISDEL=0 and a.CID=" & Session("CmpInfo") & " and a.OSID='" & Me.TextBoxValue1.Text & "') as A where A.IUNIT >0"
                End If
            End If

            '查詢其他產品
            If TextBoxKind.Text = "query" Then
                'strCmd = "select a.OID,a.PANAME,p.CNAME,p.ENAME,p.PUNIT,t.TNAME,c.CNAME AS CTNAME From PDT_ALIAS a,PRODUCT p,PDT_TYPE t,PDT_CATALOG c Where a.PID=p.OID and p.TYPE=t.OID and p.PCATALOG=c.OID and a.ISDEL=0 and p.ISDEL=0 and p.CID=" & Session("CmpInfo")
                strCmd = "select a.OID,p.OID as POID,p.pid as ppid,a.PANAME as PID,p.CNAME as PCNAME,p.ENAME as PENAME,p.PUNIT,t.TNAME as PTYPE,c.CNAME AS PCATALOG,s.UNIT as SUNIT,'0' as IFLAG,'' as UNIT,'' as PRICE From PDT_ALIAS a,PRODUCT p,PDT_TYPE t,PDT_CATALOG c,PDT_STOCKS s  Where a.PID=p.OID and p.TYPE=t.OID and p.PCATALOG=c.OID and p.oid=a.pid and a.PID=s.POID and a.ISDEL=0 and p.ISDEL=0 and p.CID=" & Session("CmpInfo")

                If Trim(Me.TextBox_PID.Text) <> "" Then
                    strCmd = strCmd & " and a.PANAME like '%" & Me.TextBox_PID.Text & "%'"
                End If
                If Trim(Me.TextBox_CNAME.Text) <> "" Then
                    strCmd = strCmd & " and p.CNAME like N'%" & Me.TextBox_CNAME.Text & "%'"
                End If
                If Trim(Me.TextBox_ENAME.Text) <> "" Then
                    strCmd = strCmd & " and p.ENAME like '%" & Me.TextBox_ENAME.Text & "%'"
                End If
                If Trim(Me.TextBox_CSNAME.Text) <> "" Then
                    strCmd = strCmd & " and p.CSNAME like N'%" & Me.TextBox_CSNAME.Text & "%'"
                End If
                If Trim(Me.DListType.SelectedValue) <> "--" Then
                    strCmd = strCmd & " and p.TYPE =" & Me.DListType.SelectedValue
                End If
                If Trim(Me.DListCatalog.SelectedValue) <> "--" Then
                    strCmd = strCmd & " and p.PCATALOG =" & Me.DListCatalog.SelectedValue
                End If
                TextBoxValue1.Text = "0"  '查詢其他產品, save時做判斷
                strCmd = strCmd & " order by a.paname"
            End If
            'MsgBox(strCmd)

            TableData(strCmd)  '顯示產品資料

    2007年1月5日 上午 03:27
  • 您好:

           您在debug時,在進入TableData Sub時,就要檢查strCmd的變數值,看這個組成的SQL語法,在執行時,會不會跑出資料來。

    2007年1月18日 上午 04:28
  • 我想我已經看出來你的問題大致上出在哪裡了。不過你在原文中既沒有說明所謂的 Query 指的是什麼,也沒有說明到底是哪個 TextBox 存留舊值,所以不能直接回答你。我只建議你在 Sub TableData(ByVal strSQL As String) 這一行加上中斷點,然後按 F11 一步一步執行,並注意看 VS2005 裡的除錯視窗,觀察各個變數的值。我相信你只要巡迴過一遍就可以馬上發現問題在哪裡。試試吧!

     

    2007年1月18日 上午 05:35
  •  

    我有試過在程式中用msgbox 方式 debug,

    看到底是哪裡出了問題

    在 sql 執行並組合 table 資料過程中,欄位值都是空的 ( 因 query 的結果是沒有值的)

    但最後就出現了舊的欄位值

    所以才一直無法明瞭哪裡有問題

     

    至於是哪個 textbox 存留舊值:

    在第一次 table 組合後,使用者 有 key 資料的欄位

    在之後組 table 時,就會出現

    例如

    使用者在第一行 的 textbox  key 了資料

    若再重新查詢,組新的 table 資料後,

    第一行的 textbox 就會留有使用者 key 的資料

     

    不過,我會試著用 中斷點 + F11 的 debug 方式試試看

    謝謝!!

     

    2007年1月19日 上午 03:12