Nedanstående fungerar utan problem Problemet är att du modiferar den listan so du itererar över. Detta bör väl ligga sist i din button click Det jag ska göra är att ta den rad som jag klickar i och ändra en cell från ett Nej till ett Ja i databasen. Tack Ola Du hjälpte mig på vägen. Man kan ju naturligtvis inte köra den koden du skrev varje varv, den ska ju bara köras en gång och det på slutet när allt är klart.Ser inte felet, HJÄÄÄÄLP
<code>
Private Sub SubmitButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SubmitButton.Click
dgShowCustomer.Visible = False
' Count the number of selected items in the DataGrid control.
Dim count As Integer = 0
' Iterate through each item (row) in the DataGrid control and
' determine whether it is selected.
Dim item As DataGridItem
For Each item In dgShowCustomer.Items
DetermineSelection(item, count)
Next
End Sub
Sub DetermineSelection(ByVal item As DataGridItem, ByRef count As Integer)
' Retrieve the SelectCheckBox CheckBox control from the
' specified item (row) in the DataGrid control.
Dim selection As CheckBox = CType(item.FindControl("SelectCheckBox"), CheckBox)
'Dim Summa As Double
' If the item is selected, display the appropriate message and
' increment the count of selected items.
If Not selection Is Nothing Then
If selection.Checked Then
'btnUpdateCustomer.Visible = True
tblUpdateCustomer.Visible = True
txtUpdateCompany.Text = item.Cells(1).Text
txtUpdateAdress.Text = item.Cells(2).Text
txtUpdateZip.Text = item.Cells(3).Text
txtUpdateOrt.Text = item.Cells(4).Text
txtUpdatePhone.Text = item.Cells(5).Text
txtUpdateFax.Text = item.Cells(6).Text
txtUpdateCellPhone.Text = item.Cells(7).Text
txtUpdateEmail.Text = item.Cells(8).Text
txtUpdateUrl.Text = item.Cells(9).Text
txtUpdateCustomerNumber.Text = item.Cells(10).Text
txtUpdateContact.Text = item.Cells(11).Text
End If
End If
End Sub
</code>
Men denna fungerar inte:
<code>
Private Sub btnArkiveraTidRapport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnArkiveraTidRapport.Click
dgTidRapportering.Visible = False
Dim item As DataGridItem
Dim count As Integer = 0
For Each item In dgTidRapportering.Items
DetermineSelectionArkiveraTidRapport(item, count)
Next
End Sub
Sub DetermineSelectionArkiveraTidRapport(ByVal item As DataGridItem, ByRef count As Integer)
Dim selection As CheckBox = CType(item.FindControl("SelectCheckBox"), CheckBox)
Dim intId As Integer
If Not selection Is Nothing Then
If selection.Checked Then
intId = item.Cells(0).Text
End If
End If
'hämta kopplingssträngen.
Dim strDbConnect As String
strDbConnect = koppling(strDbConnect)
Dim msnConnect As New Odbc.OdbcConnection(strDbConnect)
Dim sqlStr As String = UpdateTidRapport(intId)
Dim McnCommand As New Odbc.OdbcCommand(sqlStr, msnConnect)
Dim numRowsEffected As Integer = 0
Try
McnCommand.Connection.Open()
numRowsEffected = McnCommand.ExecuteNonQuery()
McnCommand.Connection.Close()
msnConnect.Close()
dgTidRapportering.Visible = True
btnArkiveraTidRapport.Visible = True
btnJusteraTidRapport.Visible = True
dgTidRapportering.DataSource = CreateDatasourceTidRapportering()
dgTidRapportering.DataBind()
tblLaggTillTidRapportering.Visible = False
dgWebbHotellsKunder.Visible = False
Catch ex As Exception
lblMessage.Text = ex.Message
End Try
End Sub
</code>
Bägge ligger i varsin datagrid och det jag vill göra i det senare fallet är att uppdatera databasen från ett "nej" till ett "ja". Det roliga är att klickar jag i den översta så ändrar han men jag får nedanstående felmeddelande. Klickar jag på någon annan så kommer samma meddelande men han ändrar inget.
<code>
Collection was modified; enumeration operation may not execute.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[InvalidOperationException: Collection was modified; enumeration operation may not execute.]
System.Collections.ArrayListEnumeratorSimple.MoveNext() +143
wesykunder.admindefault.btnArkiveraTidRapport_Click(Object sender, EventArgs e) in C:\Documents and Settings\Magnus Gustafson.STATIONAR\VSWebCache\wesykunder.wesydesign.se\wesykunder\admindefault.aspx.vb:346
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain() +1292
</code>Sv: Ser inte felet, HJÄÄÄÄLP
Du itererar över alla items i din DataGrid och när du gör det så gör du dgTidRapportering.DataBind(), dvs laddar nya items. Dessutom för varje item i din DataGrid. Jag är inte riktigt med på vad du gör.
Problemet är i vilket fall som helst att du modifierar den collection som du itererar över.
/AndreasSv:Ser inte felet, HJÄÄÄÄLP
dgTidRapportering.DataSource = CreateDatasourceTidRapportering()
dgTidRapportering.DataBind()
Alltså när du har snurrat igenom och gjort det du ska med posterna så refreshar du gridden.Sv: Ser inte felet, HJÄÄÄÄLP
Sv: Ser inte felet, HJÄÄÄÄLP
Så här ska det se ut:
<code>
Private Sub btnArkiveraTidRapport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnArkiveraTidRapport.Click
dgTidRapportering.Visible = False
Dim item As DataGridItem
Dim count As Integer = 0
For Each item In dgTidRapportering.Items
DetermineSelectionArkiveraTidRapport(item, count)
Next
dgTidRapportering.DataSource = CreateDatasourceTidRapportering()
dgTidRapportering.DataBind()
dgTidRapportering.Visible = True
tblLaggTillTidRapportering.Visible = False
dgWebbHotellsKunder.Visible = False
End Sub
Sub DetermineSelectionArkiveraTidRapport(ByVal item As DataGridItem, ByRef count As Integer)
Dim selection As CheckBox = CType(item.FindControl("SelectCheckBox"), CheckBox)
Dim intId As Integer
If Not selection Is Nothing Then
If selection.Checked Then
intId = item.Cells(0).Text
End If
End If
'hämta kopplingssträngen.
Dim strDbConnect As String
strDbConnect = koppling(strDbConnect)
Dim msnConnect As New Odbc.OdbcConnection(strDbConnect)
Dim sqlStr As String = UpdateTidRapport(intId)
Dim McnCommand As New Odbc.OdbcCommand(sqlStr, msnConnect)
Dim numRowsEffected As Integer = 0
Try
McnCommand.Connection.Open()
numRowsEffected = McnCommand.ExecuteNonQuery()
McnCommand.Connection.Close()
msnConnect.Close()
btnArkiveraTidRapport.Visible = True
btnJusteraTidRapport.Visible = True
Catch ex As Exception
lblMessage.Text = ex.Message
End Try
End Sub
</code>