2009-07-01 21 views
11

मैं एक गतिशील ग्रिडव्यू फ़ंक्शन बना रहा हूं जो डीबी से अलग-अलग तालिकाओं को एक डेटाटेबल में बांध देगा और फिर ग्रिडव्यू को डेटाटेबल असाइन करेगा! इस तरह यह काम करता है, मेरे पास एक ड्रॉपडाउनलिस्ट, ग्रिडव्यू और एक बटन है, बटन ड्रॉपडाउन सूची चयन के आधार पर विशिष्ट फ़ंक्शन को फायर करेगा और फिर ग्रिडव्यू डेटा को बाध्य करेगा, मेरी समस्या यह है कि, जब आप पहली बार बटन दबाते हैं, ग्रिडव्यू दूसरी बार दबाने के लिए डीबी से डेटा को बांध देगा, ग्रिडव्यू पहली बार दबाए गए डेटा के आंकड़ों को डुप्लिकेट करेगा! डेटा डुप्लिकेशन से बचने के लिए मैं ग्रिडव्यू को कैसे साफ़ करूं?ग्रिडव्यू को कैसे साफ़ करें?

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

कहाँ:

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

फिर एक बटन से कॉल अपने जावास्क्रिप्ट समारोह क्लिक करें बटन हैंडलिंग कोड पर क्लिक करें? – TheVillageIdiot

उत्तर

26

क्षमा करें, यह सी # में है, लेकिन इससे पहले कि आप कोई नया डेटा बाँध और यह किसी भी मौजूदा डेटा साफ़ करनी होगी बस इसे कहते ... ज़ाहिर है जब तक कि समस्या यह है कि डेटा स्रोत आप बताए जाते हैं दोहराया गया है डेटा।

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

इसके अलावा, बस ध्यान दें, आप हर बार हर कॉलम को प्रक्रिया कहलाते हैं?

gridview.Columns.Clear(); 
1

फिर आप यह डेटा स्रोत है रीसेट और उदाहरण के लिए यह rebind

gv.datasource="" 
gv.databind() 

और यह पुन: उपयोग

+0

आप ग्रिडव्यू डेटासॉर्स को खाली स्ट्रिंग असाइन नहीं कर सकते हैं, कृपया इसे आज़माएं। – Ramakrishnan

+1

मैंने ** स्ट्रिंग की कोशिश की। लक्षण ** और काम किया –

0

कर सकते हैं आमतौर पर ऐसा नहीं होता है जब आप की तरह ग्रिड rebind:: आप चलाने की आवश्यकता

grid.DataSource = 'NEW_DATA_SOURCE' 
grid.DataBind 

मुझे लगता है कि आपके फ़ंक्शन में डेटा लाने में समस्या हो सकती है:

CreateDataTable(sSql) 

कृपया इस अंदर की जाँच आप एक नया DataTable या का उपयोग करते हुए एक ही एक में डेटा को हर बार फ़ेच कर रहे हैं अगर (वैश्विक क्षेत्र में घोषित करने या अपने वर्ग से घटक तक पहुँचने के आंकड़ों के पारित किया जा सकता है)। मैं पूरी रात खो दिया था एक बार इस :(

0

प्लेस एक id के साथ एक तालिका में अपने gridview ठीक करने के लिए:

function clearGridview() 
{ 
var rows = document.getElementById('myTable').getElementsByTagName('tbody') [0].getElementsByTagName('tr').length; 
if(rows!=0) 
    document.getElementById("myTable").deleteRow(0); 
} 
संबंधित मुद्दे