Peace Everyone, Ich habe derzeit Probleme mit dieser Art von Methode beim Hinzufügen einer ungebundenen Spalte in Datagridview mit gebundenen Spalten. Weil ich diese Art von Methode nicht verwenden kann, ohne "für jede Aussage" verwenden zu müssen, was ich schon sehr irritierend finde. Da ich versuche, dies zu lösen, indem ich nicht auf dieser Seite frage. Aber ja, ich gebe schon auf. Also, hier sind meine Codes. Bitte hilf mir.Wie Hinzufügen von Zellendaten zu einer ungebundenen Spalte mit gebundenen Spalten, ohne für jedes zu verwenden? - VB NET
'------------REFRESH DISPLAY------------'
Public Sub RefreshDaysDetails()
'------------CONNECTION DATABASE------------'
Dim connectionDaysDetails As New SqlConnection(_1LoginForm.connectionstring)
'------------QUERY------------'
sqlDaysDetails = "SELECT Date,CONVERT(varchar(15), TimeIn, 100) AS 'Time In',CONVERT(varchar(15), TimeOut, 100) AS 'Time Out',DATEPART(hour, WorkingHours) AS 'Working Hours' FROM [3EmployeeAttendance] WHERE TimeOut IS NOT NULL AND TimeIn IS NOT NULL"
'------------START CONNECTION------------'
connectionDaysDetails.Open()
'------------SQL------------'
sCommandDaysDetails = New SqlCommand(sqlDaysDetails, connectionDaysDetails)
sAdapterDaysDetails = New SqlDataAdapter(sCommandDaysDetails)
sBuilderDaysDetails = New SqlCommandBuilder(sAdapterDaysDetails)
sDsDaysDetails = New DataSet()
sAdapterDaysDetails.Fill(sDsDaysDetails, "DaysDetails")
sTableDaysDetails = sDsDaysDetails.Tables("DaysDetails")
'------------SET OF BINDING SOURCE------------'
DaysDetailsbindingsource.DataSource = sDsDaysDetails.Tables("DaysDetails")
'------------CONNECTION DATABASE------------'
Dim connectionDaysDetailsTwo As New SqlConnection(_1LoginForm.connectionstring)
'------------QUERY------------'
sqlDaysDetailsTwo = "SELECT DATEPART(hour,TimeIn) as 'TotalWorkingHoursTimeIn',DATEPART(hour,TimeOut) as 'TotalWorkingHoursTimeOut' FROM [3EmployeeAttendance] WHERE TimeOut IS NOT NULL AND TimeIn IS NOT NULL "
'------------START CONNECTION------------'
connectionDaysDetailsTwo.Open()
'------------SQL------------'
sCommandDaysDetailsTwo = New SqlCommand(sqlDaysDetailsTwo, connectionDaysDetailsTwo)
sAdapterDaysDetailsTwo = New SqlDataAdapter(sCommandDaysDetailsTwo)
sBuilderDaysDetailsTwo = New SqlCommandBuilder(sAdapterDaysDetailsTwo)
'------------CODES TO DISPLAY DATA TO TEXTBOXES------------'
sCommandDaysDetailsTwo.Prepare()
sDataReaderDaysDetailsTwo = sCommandDaysDetailsTwo.ExecuteReader()
For Each row In sDataReaderDaysDetailsTwo
TotalWorkingHoursTimeIn = sDataReaderDaysDetailsTwo.Item("TotalWorkingHoursTimeIn")
TotalWorkingHoursTimeOut = sDataReaderDaysDetailsTwo.Item("TotalWorkingHoursTimeOut")
While TotalWorkingHoursTimeIn < TotalWorkingHoursTimeOut
TotalWorkingHours = TotalWorkingHours + 1
TotalWorkingHoursTimeIn = TotalWorkingHoursTimeIn + 1
End While
Next
'------------BINDS DGV TO THE EXISTING DATA------------'
DGVViewDaysDetailsForm.DataSource = DaysDetailsbindingsource
'------------CREATES DATA GRID VIEW TEXBOX COLUMN AND ADDS IT TO DATA GRID VIEW------------'
Dim TotalWorkHoursextraColumn As New DataGridViewTextBoxColumn
With TotalWorkHoursextraColumn
.Name = "TotalWorkHoursPerDay"
.HeaderText = "Total Work Hours"
.ReadOnly = True
End With
DGVViewDaysDetailsForm.Columns.Add(TotalWorkHoursextraColumn)
'------------LOOP DGV TO CALCULATE TOTAL HOURS PER ROW------------'
For Each row As DataGridViewRow In DGVViewDaysDetailsForm.Rows
row.Cells("TotalWorkHoursPerDay").Value = CInt(TotalWorkingHours)
Next
'------------CLOSE CONNECTION------------'
connectionDaysDetailsTwo.Close()
'------------CLOSE CONNECTION------------'
connectionDaysDetails.Close()
'------------DATA BINDINGS------------'
DGVViewDaysDetailsForm.DataSource = DaysDetailsbindingsource
BNViewDaysDetailsForm.BindingSource = DaysDetailsbindingsource
'------------DATA GRID VIEW SELECTION------------'
DGVViewDaysDetailsForm.SelectionMode = DataGridViewSelectionMode.FullRowSelect
DGVViewDaysDetailsForm.MultiSelect = False
End Sub
Und das ist die Bildausgabe des Codes oben:
Wie Sie die Arbeitsstunden Säule ist in Ordnung zu sehen, denn das von einer gebundenen Spalte ist. aber schauen Sie sich die ungebundene Spalte mit dem Namen "Total Work Hours" an (ich habe sie nur "Total Working Hours" genannt. Weil ich wirklich die Stundenanzahl in jeder Zeile benötige.), die Ergebnisse sind die gleichen. alle 15, weil ich meine Codes nicht korrekt ausführen kann, während ich diesen Code innerhalb der für jede Anweisung habe.
'------------LOOP DGV TO CALCULATE TOTAL HOURS PER ROW------------'
For Each row As DataGridViewRow In DGVViewDaysDetailsForm.Rows
row.Cells("TotalWorkHoursPerDay").Value = CInt(TotalWorkingHours)
Next
es irgendwelche Art und Weise die row.Cells zu beziehen ("TotalWorkHoursPerDay"). Value = CInt (TotalWorkingHours) in meinem DGVViewDaysDetailsForm?
Weil jedes Mal, wenn ich das für jede entfernt und halten nur die row.Cells ("TotalWorkHoursPerDay") Value = CInt (TotalWorkingHours)
Ich habe Fehlercodes wie:. nicht die Parameter Spaltenname gefunden Can not Zeilen anzufügen, da die Datagridview gebunden ist Spalte nicht
existiert
Überladung Auflösung fehlgeschlagen, weil kein zugänglich 'Item' akzeptiert diese Anzahl von Argumenten. –
Ok, es gibt einen anderen Weg, es zu tun. Ignoriere die DataReader-Schleife. Insgesamt und leiten Sie die Stunden in cell_validate eventHandler ab. 'Für jede Zeile als DataGridViewRow In DGVViewDaysDetailsForm.Rows Zeile.Zellen (" TotalWorkHoursPerDay "). Wert = CInt (TotalWorkingHours)' Nächste. Entferne dies und verwende die neue Antwort oben. – Leprechaun
danke für die Hilfe, aber diese Lösung funktioniert auch nicht. –