web-dev-qa-db-ja.com

グリッドビューをクリアする方法は?

DBのさまざまなテーブルをデータテーブルにバインドし、データテーブルをグリッドビューに割り当てる動的グリッドビュー関数を作成しています!これがどのように機能するかです。ドロップダウンリスト、グリッドビュー、ボタンがあります。ボタンはドロップダウンリストの選択に基づいて特定の機能を起動し、グリッドビューはデータをバインドします。私の問題は、ボタンを初めて押すと、グリッドビューはDBからのデータをバインドし、2回押すと、グリッドビューは1回目のプレスのデータからデータを複製します。データの重複を避けるためにグリッドビューをクリアするにはどうすればよいですか?

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
11
Fire Hand

申し訳ありませんが、これはC#ですが、新しいデータをバインドする前に呼び出すだけで、既存のデータがすべてクリアされます...もちろん、割り当てているデータソースに重複データがある場合を除きます。

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

また、そのプロシージャが呼び出されるたびにすべての列を追加していることに注意してください。実行する必要があります:

gridview.Columns.Clear();
26
djdd87

たとえば、データソースをリセットして再バインドできます

gv.datasource=""
gv.databind()

そしてそれを再利用します

1
v3ga

グリッドビューを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);
}
0
Asha Davis

通常、次のようにグリッドを再バインドすると、これは発生しません。

grid.DataSource = 'NEW_DATA_SOURCE'
grid.DataBind

問題は、データをフェッチする関数にあると思います。

 CreateDataTable(sSql)

毎回新しいDataTableにデータをフェッチする場合、または同じデータテーブルを使用する場合は、この内部を確認してください(グローバルスコープで宣言されるか、クラスからデータアクセスコンポーネントに渡される場合があります)。私はこれを修正するために一度一晩を失いました:(

0
TheVillageIdiot