2009-07-01 20 views
11

Estoy creando una función de vista de cuadrícula dinámica que unirá diferentes tablas de DB en una tabla de datos y luego asignará la tabla de datos a la vista de cuadrícula. Así es como funciona, tengo una lista desplegable, vista de cuadrícula y un botón, el botón disparará una función específica basada en la selección de lista desplegable y luego gridview vinculará los datos, mi problema es que, cuando presiona el botón por primera vez, la vista de cuadrícula vinculará los datos de DB, presionando por segunda vez, la vista de cuadrícula duplicará los datos de la primera vez que presione! ¿Cómo borro la vista de cuadrícula para evitar la duplicación de datos?cómo borrar la vista de cuadrícula?

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

Dónde es el botón haga clic en el código de manipulación? – TheVillageIdiot

Respuesta

26

Lo sentimos, este se encuentra en C#, pero sólo lo llaman antes de enlazar los datos nuevos y va a borrar todos los datos existentes ... a menos que, por supuesto, el problema es que el origen de datos está asignando tiene el duplicado datos.

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

Además, solo para tener en cuenta, ¿está agregando cada columna en cada vez que se llama al procedimiento? Tiene que ejecutar:

gridview.Columns.Clear(); 
1

se puede restablecer la fuente de datos y volver a enlazar por ejemplo

gv.datasource="" 
gv.databind() 

y luego volver a utilizarlo

+0

no se puede asignar cadena vacía a gridview datasorce, por favor pruébelo – Ramakrishnan

+1

probé ** cadena.Empty ** y funcionó –

0

Por lo general, esto no sucede cuando se vuelva a enlazar rejilla como:

grid.DataSource = 'NEW_DATA_SOURCE' 
grid.DataBind 

Creo que es posible que el problema esté en su función de obtención de datos:

CreateDataTable(sSql) 

Por favor revisar el interior de esto si estás obteniendo los datos cada vez que en un nuevo mismo DataTable o el uso (puede ser declarado en el ámbito global o pasado de su clase para el acceso a datos de componentes). Había perdido toda la noche una vez para solucionar este lugar :(

0

su gridview en una mesa con un id:

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

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

Luego llamada de un botón de clic en su función javascript:

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