Jag har en DataGrid som jag fyller med ett DataSet. När detta är gjort kan jag inte använda några andra subbar eller funktioner utan att det blir fel på sidan (page not found mm). Jag misstänker starkt att det blir någon slags rundgånd i antingen DataGriden eller DataSetet eller i båda. Nej, för din datasource är inte ett DataSet dom du binder till din datagrid utan en DataView. Därav InvalidCast då du försöker att typa en DataView till ett DataSet Jag vet att jag är ute på hal is. När jag binder binder DataSetet fungerar slipper jag Cast-felet men jag är tillbaka på ruta 1 d.v.s att sidan "försvinner" vid PostBack. Om jag kollar källkoden är ViewState VÄLDIGT stor. Kanske är det denna som skall manipuleras på något sätt, eller? Hmmmmmm, lite pinsamt, men glad är jag!!!Tömma DdataGrid/DataSet, hur???
Jag har provat med:
<code>
CType(DataGrid1.DataSource, DataSet).Clear()
</code>
men då får jag felet: Specified cast is not valid.
Litta kod:
<code>
'--> Om sidan är postad
If (Page.IsPostBack) Then
'--> Deklarerar DataSet
Dim DS As New DataSet()
'--> Testar
Try
'--> Sökväg till uppladdad fil
Dim strFilePath As String = Server.MapPath(Request.QueryString("FilePath").ToString.Trim)
'--> Valt arbetsblad
Dim strSheetName As String = Request.QueryString("SheetName").ToString.Trim
'--> Koppling mot uppladdat Excel-dokument
Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strFilePath & ";" & _
"Extended Properties=""Excel 8.0;"""
'--> SQL-fråga mot Excel-dokument
Dim objData As New OleDbDataAdapter("SELECT * FROM [" & strSheetName & "]", strConn)
objData.TableMappings.Add("Table", "tblImportedData")
objData.Fill(DS)
'--> Deklarerar datacolumn
Dim dcCurrent As DataColumn
'--> Deklarerar variabler
Dim intCompanyID As Integer = Session("intCompanyID")
Dim intUserID As Integer = Session("intUserID")
Dim intAccountNo As Integer
Dim intPropertyDescription As Integer
Dim intPopularName As Integer
Dim intAddress As Integer
Dim intZip As Integer
Dim intCity As Integer
' KOLUMNNAMN
'************
'--> Bygger listbox med kolumnnamn från Excel-dokument
For Each dcCurrent In DS.Tables(0).Columns
Select Case dcCurrent.ColumnName.ToString
Case tbHandlesAccountNo.Text.ToString
dcCurrent.ColumnName = "Konto/Objektnr."
intAccountNo = dcCurrent.Ordinal.ToString
Case tbHandlesPropertyDescription.Text
dcCurrent.ColumnName = "Fastighetsbeteckning"
intPropertyDescription = dcCurrent.Ordinal.ToString
Case tbHandlesPopularName.Text
dcCurrent.ColumnName = "Populärnamn"
intPopularName = dcCurrent.Ordinal.ToString
Case tbHandlesAddress.Text
dcCurrent.ColumnName = "Adress"
intAddress = dcCurrent.Ordinal.ToString
Case tbHandlesZip.Text
dcCurrent.ColumnName = "Postnummer"
intZip = dcCurrent.Ordinal.ToString
Case tbHandlesCity.Text
dcCurrent.ColumnName = "Ort"
intCity = dcCurrent.Ordinal.ToString
End Select
Next
'--> Deklarerar variabler
Dim intRows As Integer
Dim intCols As Integer
Dim arrRowsExists As String
Dim intDeletedRowsCounter As Integer = 0
Dim intAddedRowsCounter As Integer = 0
Dim Split_arrRowsExists() As String
Dim intCheckProperty As Integer
'--> Deklarerar Property-objekt
Dim objProperty As New SkadeBas.Properties.SB_Property()
Dim objPropertyDetails As New SkadeBas.Properties.PropertyDetails()
'--> Loopar igenom alla rader
For intRows = 0 To DS.Tables(0).Rows.Count - 1
'--> Tilldelar objektet PropertyDetails värden
objPropertyDetails.CompanyID = intCompanyID
objPropertyDetails.UserID = intUserID
objPropertyDetails.PropertyStatus = 1
If (DS.Tables(0).Rows(intRows)(intAccountNo).ToString = "") Then
objPropertyDetails.AccountNo = intRows + 1
Else
objPropertyDetails.AccountNo = DS.Tables(0).Rows(intRows)(intAccountNo).ToString
End If
If (DS.Tables(0).Rows(intRows)(intPropertyDescription).ToString = "") Then
objPropertyDetails.PropertyDescription = "-"
Else
objPropertyDetails.PropertyDescription = DS.Tables(0).Rows(intRows)(intPropertyDescription).ToString
End If
If (DS.Tables(0).Rows(intRows)(intPopularName).ToString = "") Then
objPropertyDetails.PopularName = "-"
Else
objPropertyDetails.PopularName = DS.Tables(0).Rows(intRows)(intPopularName).ToString
End If
If (DS.Tables(0).Rows(intRows)(intAddress).ToString = "") Then
objPropertyDetails.Address = "-"
Else
objPropertyDetails.Address = DS.Tables(0).Rows(intRows)(intAddress).ToString
End If
If (DS.Tables(0).Rows(intRows)(intZip).ToString = "") Then
objPropertyDetails.Zip = "-"
Else
objPropertyDetails.Zip = DS.Tables(0).Rows(intRows)(intZip).ToString
End If
If (DS.Tables(0).Rows(intRows)(intCity).ToString = "") Then
objPropertyDetails.City = "-"
Else
objPropertyDetails.City = DS.Tables(0).Rows(intRows)(intCity).ToString
End If
'--> Kontrollerar om fastigheten existerar eller ej
' 0 = existerar ej, annat = existerar
intCheckProperty = objProperty.CheckPropertyBeforeAdd(objPropertyDetails)
'--> Fastigheten existerar ej
If (intCheckProperty = 0) Then
'--> Räknar antal poster som adderas
intAddedRowsCounter += 1
If (Obj.ID = "btnAction") Then
'--> Adderar fastighet
objProperty.AddProperty(objPropertyDetails)
End If
'--> Fastigheten existerar
Else
'--> Lägger till rad-index till array
arrRowsExists += intRows & ","
'--> Räknar antal poster som existerar
intDeletedRowsCounter += 1
End If
Next '// For intRows = 0 To DS.Tables(0).Rows.Count - 1
'--> Gör Label som innehåller all importerad data synlig
lblImportedDataContainer.Visible = True
'--> Kontrollerar att array ej är tom
If Not (arrRowsExists Is Nothing) Then
'--> Splittar sträng
Split_arrRowsExists = arrRowsExists.Split(",")
'--- Loopar igenom array
For intRows = 0 To Split_arrRowsExists.Length - 1
'--> Om inte array-värdet är tomt
If Not (Split_arrRowsExists(intRows) = "") Then
'--> Raderar rad från DataSet
DS.Tables(0).Rows(Split_arrRowsExists(intRows)).Delete()
End If
Next
End If
If (Obj.ID = "btnTestAction") Then
'--> Fyller Label som visar antalet adderade rader
lblImportedDataResult.Text += "<h2>Testa import, om allt ser bra ut, klicka på knappen: Slutför import.</h2>"
lblImportedDataResult.Text += "<strong>Antal fastigheter som kommer att adderas: " & intAddedRowsCounter & " st </strong><br>"
Else
'--> Fyller Label som visar antalet adderade rader
lblImportedDataResult.Text += "<strong>Antal adderade fastigheter: " & intAddedRowsCounter & " st </strong><br>"
End If
'--> Om inte räknare för antaler raderade
' rader = 0 visas antaler här
If Not (intDeletedRowsCounter = 0) Then
lblImportedDataResult.Text += "<strong>Antal redan registrerade fastigheter: " & intDeletedRowsCounter & " st </strong>"
End If
'--> Fyller och binder DataGrid från DataSet
dgImportedData.DataSource = DS.Tables(0).DefaultView
dgImportedData.DataBind()
If (Obj.ID = "btnTestAction") Then
btnReset.Visible = True
End If
'--> Fångar upp eventuella fel
Catch Exc As Exception
'--> Visar felmeddelande i ett javascript: alert-fönster
'Response.Write("<script>alert('FÖLJANDE FEL UPPSTOD VID IMPORT\n\n" & Exc.ToString & "');</script>")
Throw Exc
'--> Rensning
Finally
'--> Tömmer DataSet samt DataGrid från minnet
'CType(dgImportedData.DataSource, DataSet).Clear()
'DS.Tables(0).Clear()
???????????????????????????????????????????????????????
End Try
End If '// If (Page.IsPostBack)
</code>Sv: Tömma DdataGrid/DataSet, hur???
DataSet.Tables = DataTable
DataSet.Tables(0).DefaultView = DataView
Tycker att du kan kika i Framework SDK'n där du får allt listat, Namespaces, klasser, egenskaper, metoder och så mycket mer.
cya,
PatrikBSv: Tömma DdataGrid/DataSet, hur???
Tänkte att jag skulle skriva om vad som är tänkt att hända.
Problemen uppstår på sida 2
Sida 1
-------
1. Excel-fil laddas upp till servern
2. Använder väljer vilket arbetsblad som skall användas
3. Sökväg till uppladdad fil samt valt arbetsblad postas till Sida 2
Sida 2
-------
1. Hämtar alla rubriker i valt arbetsblad
2. Kopplar ihop arbetsbladets rubriker med definierade textboxar
3. Testar import av data d.v.s binder till DataGrid
4. HÄR KOMMER PROBLEMET: Om sidan postas igen t.ex. om användare vill koppla arbetsbladets rubriker på ett annat sättSv: Tömma DdataGrid/DataSet, hur???
Jag angav i DataGriden: EnableViewState = False och voilá nu fungerar det som jag vill, men jag får nog läsa lite mer om DataSets och DataGrids så jag har lite koll på vad som händer.