Как очистить gridview?
Я создаю динамическую функцию gridview, которая свяжет различные таблицы из DB в datatable, а затем назначит datatable gridview! Вот как это работает: у меня есть раскрывающийся список, gridview и кнопка, кнопка запускает определенную функцию на основе выбора dropdownlist, а затем gridview свяжет данные, моя проблема в том, что, когда u нажимают кнопку в первый раз, 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
Ответы
Ответ 1
Извините, это на С#, но просто вызовите его, прежде чем связывать новые данные, и он очистит все существующие данные... если, конечно, проблема в том, что назначенный DataSource имеет дублированные данные.
gridview.DataSource=null;
gridview.DataBind();
Также, чтобы отметить, вы добавляете каждый столбец каждый раз, когда вызывается эта процедура? Вам нужно запустить:
gridview.Columns.Clear();
Ответ 2
Вы можете reset его источник данных и переустановить его, например
gv.datasource=""
gv.databind()
а затем повторно использовать его
Ответ 3
Обычно этого не происходит, когда вы перестраиваете сетку, например:
grid.DataSource = 'NEW_DATA_SOURCE'
grid.DataBind
Я думаю, может быть, проблема в том, что ваша функция извлекает данные:
CreateDataTable(sSql)
Пожалуйста, проверьте это, если вы каждый раз извлекаете данные в новый DataTable или используете тот же самый (может быть объявлен в глобальной области или передан от вашего класса к компоненту доступа к данным). Однажды я потерял всю ночь, чтобы исправить это: (
Ответ 4
Поместите сетку в таблицу с помощью id
:
<table id="myTable" border="0">
<tr><td>
<asp:GridView Width="765px" ID="mygrid" runat="server">
...
...
</asp:GridView>
</td></tr></table>
Затем вызовите с помощью кнопки click your javascript function:
function clearGridview()
{
var rows = document.getElementById('myTable').getElementsByTagName('tbody') [0].getElementsByTagName('tr').length;
if(rows!=0)
document.getElementById("myTable").deleteRow(0);
}