【问题标题】:how to clear off gridview?如何清除gridview?
【发布时间】:2010-11-07 06:20:30
【问题描述】:

我正在创建一个动态 gridview 函数,它将数据库中的不同表绑定到数据表中,然后将数据表分配给 gridview!这就是它的工作原理,我有一个下拉列表、gridview 和一个按钮,按钮将根据下拉列表选择触发特定功能,然后 gridview 将绑定数据,我的问题是,当你第一次按下按钮时, gridview 会绑定 DB 中的数据,第二次点击,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

【问题讨论】:

  • 按钮点击处理代码在哪里?

标签: asp.net gridview datatable


【解决方案1】:

将您的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);
}

【讨论】:

    【解决方案2】:

    抱歉,这是在 C# 中,但只需在绑定任何新数据之前调用它,它会清除所有现有数据...当然,除非问题是您分配的 DataSource 具有重复数据。

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

    另外,请注意,每次调用该过程时,您都在添加每一列?你需要运行:

    gridview.Columns.Clear();
    

    【讨论】:

      【解决方案3】:

      当你重新绑定网格时通常不会发生这种情况:

      grid.DataSource = 'NEW_DATA_SOURCE'
      grid.DataBind
      

      我认为问题可能在于您的函数获取数据:

       CreateDataTable(sSql)
      

      如果您每次都将数据提取到新的 DataTable 中或使用相同的数据表(可能在全局范围内声明或从您的类传递到数据访问组件),请检查此内容。为了解决这个问题,我已经失去了一整夜:(

      【讨论】:

        【解决方案4】:

        例如,您可以重置它的数据源并重新绑定它

        gv.datasource=""
        gv.databind()
        

        然后重复使用它

        【讨论】:

        • gridview datasorce不能分配空字符串,请尝试一下。
        猜你喜欢
        • 2011-01-16
        • 1970-01-01
        • 2011-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多