J'ai un dataGridView non lié. En raison des différentes choses que je fais avec les données de la grille, je ne veux pas le lier. Les colonnes sont prédéfinies dans les paramètres (colonnes d'édition) du DataGridView.
Je souhaite créer une nouvelle ligne, puis renseigner la ligne de grille avec des données. J'essaie d'utiliser la méthode {"L'indice était hors de portée. Doit être non négatif et moins que la taille de la collection." & VBCLLF & "Nom du paramètre: index"} p>
BlockQuote> Le SQL suivant Récupérez les données: P> .Add.rws code> mais il échoue avec
Dim FSchedCmd As SqlCommand
Dim FSchedSQL As String
Dim FSchedConn As New SqlConnection()
Dim FSchedadapter As New SqlDataAdapter()
Dim i As Integer = 0
Dim rowIndex As Integer
Dim row As DataGridViewRow
AddedNewRow = 1
Dim dsFSched As New DataSet()
FSchedSQL = "Select ShiftName, ScheduleStart, ScheduleEnd, Position, ADP_ID1, Name1, ADP_ID2, Name2, ADP_ID3, Name3, ADP_ID4, Name4, ADP_ID5, Name5, ADP_ID6, Name6, ADP_ID7, Name7 from FormattedSchedules where ScheduleName = @ScheduleName;"
Try
If GlobalVariables.logProd = 1 Then
GlobalVariables.strConnection = "CCAPProdConnectionString"
Else
GlobalVariables.strConnection = "CCAPTestConnectionString"
End If
FSchedConn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings(GlobalVariables.strConnection).ConnectionString
FSchedConn.Open()
FSchedCmd = New SqlCommand(FSchedSQL, FSchedConn)
FSchedCmd.Parameters.Add("@ScheduleName", SqlDbType.VarChar).Value = cboCreateScheduleName.Text
FSchedadapter.SelectCommand = FSchedCmd
FSchedadapter.Fill(dsFSched)
FSchedadapter.Dispose()
FSchedCmd.Dispose()
FSchedConn.Close()
'dgvCreateSchedule.DataSource = dsFSched.Tables(0)
dgvCreateSchedule.Rows.Clear()
With dgvCreateSchedule
Dim RowNo As Long = 0
'.RowCount = 0
While RowNo <= dsFSched.Tables(0).Rows.Count - 1
.Rows.Add(1)
.Rows(RowNo).Cells(0).Value = dsFSched.Tables(0).Rows(RowNo).Item(0) 'ShiftName
'.Rows(RowNo).Cells(1).Value = dsFSched.Tables(0).Rows(RowNo).Item(1) 'Start Time
.Rows(RowNo).Cells(1).Value = Convert.ToDateTime(dsFSched.Tables(0).Rows(RowNo).Item(1)).TimeOfDay
'.Rows(RowNo).Cells(2).Value = dsFSched.Tables(0).Rows(RowNo).Item(2) 'End Time
.Rows(RowNo).Cells(2).Value = Convert.ToDateTime(dsFSched.Tables(0).Rows(RowNo).Item(2)).TimeOfDay 'End Time
.Rows(RowNo).Cells(3).Value = dsFSched.Tables(0).Rows(RowNo).Item(3) 'Position
.Rows(RowNo).Cells(4).Value = dsFSched.Tables(0).Rows(RowNo).Item(4) 'ADP_ID1
.Rows(RowNo).Cells(5).Value = dsFSched.Tables(0).Rows(RowNo).Item(5) 'Name1
.Rows(RowNo).Cells(6).Value = dsFSched.Tables(0).Rows(RowNo).Item(6) 'ADP_ID2
.Rows(RowNo).Cells(7).Value = dsFSched.Tables(0).Rows(RowNo).Item(7) 'Name2
.Rows(RowNo).Cells(8).Value = dsFSched.Tables(0).Rows(RowNo).Item(8) 'ADP_ID3
.Rows(RowNo).Cells(9).Value = dsFSched.Tables(0).Rows(RowNo).Item(9) 'Name3
.Rows(RowNo).Cells(10).Value = dsFSched.Tables(0).Rows(RowNo).Item(10) 'ADP_ID4
.Rows(RowNo).Cells(11).Value = dsFSched.Tables(0).Rows(RowNo).Item(11) 'Name4
.Rows(RowNo).Cells(12).Value = dsFSched.Tables(0).Rows(RowNo).Item(12) 'ADP_ID5
.Rows(RowNo).Cells(13).Value = dsFSched.Tables(0).Rows(RowNo).Item(13) 'Name5
.Rows(RowNo).Cells(14).Value = dsFSched.Tables(0).Rows(RowNo).Item(14) 'ADP_ID6
.Rows(RowNo).Cells(15).Value = dsFSched.Tables(0).Rows(RowNo).Item(15) 'Name6
.Rows(RowNo).Cells(16).Value = dsFSched.Tables(0).Rows(RowNo).Item(16) 'ADP_ID7
.Rows(RowNo).Cells(17).Value = dsFSched.Tables(0).Rows(RowNo).Item(17) 'Name7
RowNo = RowNo + 1
End While
End With
If dgvCreateSchedule.RowCount > 0 Then
dgvCreateSchedule.Rows(0).Selected = True
dgvCreateSchedule.CurrentCell = dgvCreateSchedule.Rows(0).Cells(0)
'dgvCreateSchedule.FirstDisplayedScrollingRowIndex = dgvCreateSchedule.CurrentRow.Index
End If
Catch ex As Exception
MessageBox.Show("Cannot open FormattedSchedules to load grid")
End Try
AddedNewRow = 0
3 Réponses :
Ceci devrait être l'option la plus rapide: ce qu'il ajoute toutes les "cellules" avec la ligne. p> et lors de la modification des cellules, je préfère utiliser < / p>
Nous avons posté à peu près exactement la même heure
Tu as raison. Je n'ai pas vu votre réponse avant de soumettre.
Vous devez ajouter .Value au code d'édition. Aussi, vous avez une parenthèse supplémentaire de la routine à la ligne.Ajouter.
@Mary vrai ça.
J'ai essayé d'utiliser les deux méthodes suggérées dans les réponses: .Rows.add (dsfsched.tables (0) .Rows (Rowno) .itemarray) Pour chaque XROW comme Datarow dans DSFSCHED.TABLE (0) .ore DGVCreateschedule.rows.add (XROW .Itemarray) Suivant et les deux me donnent la même erreur
Ajoutez-le comme ceci, en supposant qu'il y a le même nombre de colonnes / commande
J'ai essayé d'utiliser les deux méthodes suggérées dans les réponses:> .Rows.add (dsfsched.tables (0) .Rows (Rowno) .itemarray)> Pour chaque XROW comme DataRow dans DSFSCHED.TABLE (0) .ore DGVCreateschedule.rows.Ajouter (xrow.itemarray) Suivant ... et me donne la même erreur
J'ai changé le nom de la DGV vers Vous pouvez utiliser des instructions de compilation conditionnelle pour choisir la chaîne de connexion correcte. Pas nécessaire de conserver une variable booléenne quelque part pour déterminer la chaîne correcte. Je sais que j'oublierais de le changer pour la version de libération. P> Vous avez fait une bonne fermeture et votre disposition d'objets de base de données, mais s'il y a une erreur, tout ce bon travail sera pour rien. Un transmettez la chaîne de connexion directement sur le constructeur de la connexion et passez le SQL Déclaration et la connexion directement au constructeur de la commande. P> N'ouvrez pas votre connexion avant la dernière minute. Dans le cas d'un Je ne vois rien de mal à votre ligne DataGridView1 CODE> car c'est ce que je suis arrivé dans mon projet de test.
en utilisant ... fin à l'aide d'un bloc code> accomplira la fermeture, disposera même s'il y a une erreur. P>
datadapter.frillez code>, la connexion est ouverte et fermée pour vous, si l'adaptateur recherche et ouvre la connexion, il le laisse ouverte. Dans ce cas, il n'y a pas besoin d'un adaptateur ou d'un fichier de données code>. P>
.rows.add (1) code >. Le problème vient sur la ligne suivante. L'index de
datagridview.rows code> est un
int32 code>,
integer code> dans vb.net, et que vous avez déclaré
rowno code> comme
long code>. Bien sûr, vous voudrez utiliser le code suggéré par @cruled Réponse. P>
Private Sub OPCode()
Dim dt As New DataTable
Dim FSchedSQL = "Select ShiftName, ScheduleStart, ScheduleEnd, Position, ADP_ID1, Name1, ADP_ID2, Name2, ADP_ID3, Name3, ADP_ID4, Name4, ADP_ID5, Name5, ADP_ID6, Name6, ADP_ID7, Name7 from FormattedSchedules where ScheduleName = @ScheduleName;"
Try
#If Not DEBUG Then
GlobalVariables.strConnection = "CCAPProdConnectionString"
#Else
GlobalVariables.strConnection = "CCAPTestConnectionString"
#End If
Using FSchedConn As New SqlConnection(ConfigurationManager.ConnectionStrings(GlobalVariables.strConnection).ConnectionString)
Using FSchedCmd As New SqlCommand(FSchedSQL, FSchedConn)
FSchedCmd.Parameters.Add("@ScheduleName", SqlDbType.VarChar).Value = cboCreateScheduleName.Text
FSchedConn.Open()
dt.Load(FSchedCmd.ExecuteReader)
End Using
End Using
DataGridView1.Rows.Clear()
For Each xrow As DataRow In dt.Rows
DataGridView1.Rows.Add(xrow.ItemArray)
Next
If DataGridView1.RowCount > 0 Then
DataGridView1.Rows(0).Selected = True
DataGridView1.CurrentCell = DataGridView1.Rows(0).Cells(0)
End If
Catch ex As Exception
MessageBox.Show("Error loading grid")
End Try
End Sub