2009-07-01 52 views
11

我正在創建一個動態網格視圖函數,它將DB中的不同表格綁定到一個數據表中,然後將數據表分配給gridview!這是它是如何工作的,我有一個下拉列表,gridview和一個按鈕,該按鈕將基於下拉列表選擇觸發特定功能,然後gridview將綁定數據,我的問題是,當你第一次按下按鈕時, gridview會綁定數據庫中的數據,第二次按下時,gridview會複製第一次按下數據的數據!我如何清除gridview避免數據重複?如何清除gridview?

Private Sub Login() 
    sSql = "" & _ 
    "SELECT TYPE, SUBTYPE, LOGTS, ACTION, USERID, STAT1 " & _ 
    "FROM i_LOG " & _ 
    "WHERE TYPE = 'USR' AND SUBTYPE = 'LOG' " & _ 
    "AND CONVERT(VARCHAR(20), LOGTS, 103) >= '" & txtDTFrom.Text & _ 
    "' AND CONVERT(VARCHAR(20), LOGTS, 103) <= '" & txtDTTo.Text & "'" 

    DT = CreateDataTable(sSql)  'Retrieve from database. 

    Session(sSesDT) = DT 
    GVM.DataTable = DT 
    GVM.GVAddEmptyRow() 

    Dim seq As New BoundField 
    Dim Type As New BoundField 
    Dim SubType As New BoundField 
    Dim Logts As New BoundField 
    Dim action As New BoundField 
    Dim user As New BoundField 
    Dim status As New BoundField 

    seq.HeaderText = GVM.DTNumberField 
    seq.DataField = GVM.DTNumberField 

    Type.HeaderText = "Type" 
    Type.DataField = "TYPE" 

    SubType.HeaderText = "Subtype" 
    SubType.DataField = "SUBTYPE" 

    Logts.HeaderText = "Date and Time" 
    Logts.DataField = "LOGTS" 

    action.HeaderText = "Action" 
    action.DataField = "ACTION" 

    user.HeaderText = "User ID" 
    user.DataField = "USERID" 

    status.HeaderText = "Status" 
    status.DataField = "STAT1" 

    gv.AutoGenerateColumns = False 
    gv.Columns.Add(Type) 
    gv.Columns.Add(SubType) 
    gv.Columns.Add(Logts) 
    gv.Columns.Add(action) 
    gv.Columns.Add(user) 
    gv.Columns.Add(seq) 
    gv.Columns.Add(status) 

    gv.DataSource = Session(sSesDT) 
    gv.DataBind() 
End Sub 

Private Overloads Function CreateDataTable(ByVal sSql As String) As DataTable 
    Dim DA As New OleDb.OleDbDataAdapter 
    Dim dtDataTbl As New DataTable 
    Dim dcDataCol As New DataColumn 

    With DBMgr 
     .openCnn() 
     .SQL = sSql 
     .openRst() 
     DA.Fill(dtDataTbl, .rst) 
    End With 

    '==Adding Columns== 
    dcDataCol = New DataColumn 'No 
    With dcDataCol 
     .DataType = GetType(Int32) 
     .ColumnName = GVM.DTNumberField 
     .AutoIncrement = True 
     '.AllowDBNull = True 
    End With 
    dtDataTbl.Columns.Add(dcDataCol) 
    '**Adding Columns** 

    Return dtDataTbl 
End Function 
+0

凡是按鈕點擊處理代碼? – TheVillageIdiot 2009-07-01 08:24:20

回答

26

對不起,這是在C#中,但只是把它綁定任何新數據,它會清除所有現有數據之前......當然,除非問題是,你正在分配的數據源有複製數據。

gridview.DataSource=null; 
gridview.DataBind(); 

另外,只需要注意,每次調用該過程時都要添加每列。你需要運行:

gridview.Columns.Clear(); 
1

您可以重置它的數據源,並重新綁定例如

gv.datasource="" 
gv.databind() 

,然後再用它

+0

你不能指定空字符串到gridview數據存儲,請試試看 – Ramakrishnan 2010-09-16 13:29:32

0

通常當你重新綁定網這樣的情況不會發生:

grid.DataSource = 'NEW_DATA_SOURCE' 
grid.DataBind 

我想可能是問題出在你函數中取數據:

CreateDataTable(sSql) 

請這裏面檢查,如果你每次提取數據到一個新的DataTable或使用相同的一個(可以在全局範圍內聲明或者從你的類傳遞到數據訪問組件)。我失去了整個晚上一次,以解決這個問題:(

0

將您在表中的GridView有id

<table id="myTable" border="0"> 
<tr><td>            
<asp:GridView Width="765px" ID="mygrid" runat="server"> 
... 
... 
</asp:GridView> 

</td></tr></table> 

然後從一個按鈕調用單擊您的javascript函數:

function clearGridview() 
{ 
var rows = document.getElementById('myTable').getElementsByTagName('tbody') [0].getElementsByTagName('tr').length; 
if(rows!=0) 
    document.getElementById("myTable").deleteRow(0); 
}