Datagridview不爽快 [英] Datagridview not refreshing

查看:50
本文介绍了Datagridview不爽快的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Datagridview连接到数据集。问题是偶尔,当数据刷新时,它不会显示在DGV中。代码是:

I have a Datagridview connected to a dataset.The problem is that occasionally,when the data is refreshed,it is not displayed in the DGV.The code is:

 Private Sub DisplayInDGV()
        Dim SQLSet As String
        Dim DASet As New OleDb.OleDbDataAdapter
        Dim DSSet As New DataSet
        SQLSet = "Select * From SetDisplayTable"

        DASet = New OleDb.OleDbDataAdapter(SQLSet, Con)
        DSSet.Clear()
        DASet.Fill(DSSet, "DSSetHere")
        With DGVSetView
           
            .Refresh()
            .AutoGenerateColumns = False   'This line must be placed before assigning the datasource to the datagridview'
            .DataSource = Nothing
            .DataSource = DSSet.Tables(0)

            .Update()
           DGVSetView.Columns(i).DataPropertyName = DSSet.Tables(0).Columns(i).ToString
          
            .Columns(0).DataPropertyName = DSSet.Tables(0).Columns(0).ToString
            .Columns(2).DataPropertyName = DSSet.Tables(0).Columns(1).ToString
            .Columns(3).DataPropertyName = DSSet.Tables(0).Columns(2).ToString
            .Columns(4).DataPropertyName = DSSet.Tables(0).Columns(3).ToString
            .Columns(5).DataPropertyName = DSSet.Tables(0).Columns(4).ToString
            .Columns(6).DataPropertyName = DSSet.Tables(0).Columns(5).ToString
            .Columns(7).DataPropertyName = DSSet.Tables(0).Columns(6).ToString
            .Columns(8).DataPropertyName = DSSet.Tables(0).Columns(7).ToString
            .Columns(9).DataPropertyName = DSSet.Tables(0).Columns(8).ToString
            .Columns(10).DataPropertyName = DSSet.Tables(0).Columns(9).ToString
            .Columns(11).DataPropertyName = DSSet.Tables(0).Columns(10).ToString 'Item Unique Code for Hot Edit
            .Columns(14).DataPropertyName = DSSet.Tables(0).Columns(12).ToString
        End With
        'Updating Totals/::
        For ItemRow As Integer = 0 To DGVSetView.Rows.Count - 1
            If DGVSetView.Rows(ItemRow).Cells(14).Value = True Then
                DGVSetView.Rows(ItemRow).Cells(12).Value = DGVSetView.Rows(ItemRow).Cells(10).Value
            ElseIf DGVSetView.Rows(ItemRow).Cells(14).Value = False Then
                DGVSetView.Rows(ItemRow).Cells(13).Value = DGVSetView.Rows(ItemRow).Cells(10).Value

            End If
        Next
        'Updating School and general totals in DGV//:
        Dim SchoolTotal, GeneralTotal As Decimal
        For ColumnTotal As Integer = 0 To DGVSetView.Rows.Count - 1

            SchoolTotal += DGVSetView.Rows(ColumnTotal).Cells(12).Value
            GeneralTotal += DGVSetView.Rows(ColumnTotal).Cells(13).Value
        Next
        txtSchoolAmtFinal.Text = SchoolTotal
        txtGeneralAmtFinal.Text = GeneralTotal

        DGVSetView.Update()
        'Get gross total of the DGV amount column//:
        If DGVSetView.RowCount <> 0 Then
            Dim GrossAmt As Decimal = 0

            For Index As Integer = 0 To DGVSetView.RowCount - 1
                '  GrossAmt += Convert.ToDecimal(DataGridView1.Rows(Index).Cells(11).Value)
                If Str(DGVSetView.Rows(Index).Cells(10).Value) = "Null" Or (DGVSetView.Rows(Index).Cells(10).Value) <= 0 Then
                    MsgBox("Item Number " & (DGVSetView.Rows(Index).Cells(10).Value) & " is either blank or 0", MsgBoxStyle.Exclamation, "Item Error")
                Else
                    GrossAmt += Convert.ToDecimal(DGVSetView.Rows(Index).Cells(10).Value)
                End If
            Next
            txtInsertGrossAmt.Text = GrossAmt ' - Val(DGVSetView.Text)
            Call SetNetAmount()
        End If
        'Generate Serial//:
        Dim X As Integer
        Do While X < DGVSetView.Rows.Count
            DGVSetView.Item(0, X).Value = X + 1
            X = X + 1
        Loop
        'Disbaling editing in all columns except pending//:
        With DGVSetView
            .Columns(0).ReadOnly = True
            .Columns(2).ReadOnly = True
            .Columns(3).ReadOnly = True
            .Columns(4).ReadOnly = True
            .Columns(5).ReadOnly = True
            .Columns(6).ReadOnly = True
            .Columns(7).ReadOnly = True
            .Columns(8).ReadOnly = True
            .Columns(9).ReadOnly = True
            .Columns(10).ReadOnly = True
        End With
        txtTotalItems.Text = DGVSetView.Rows.Count
        For Each r As DataGridViewRow In DGVSetView.Rows
            r.Cells(1).Value = True
        Next r
    End Sub
   

请注意,整个操作仅在单个表单上完成,而b中的数据库表ackend已正确更新。

Note that the whole operation is done on a single form only and the database table in the backend is properly updated.

问题是间歇性发生而不是定期发生。

The problem occurs intermittently and not on a regular basis.

Khalid。

推荐答案

您好,

我粗略地看了一下代码,所以说我建议不要刷新DataGridView。从概念上讲,你在DataGridView中拥有的是正确的,为什么刷新?如果你正在刷新看起来像做总计的东西,那么考虑
使用只读的DataColumn表达式,为你做计算。我有一个简单的例子,显示行总计和总计。它不使用DataSet,但这并不重要,因为在您的代码中,您在DataSet中包含
的DataTable,并在加载数据后添加DataColumn并将其作为列添加到DataGridView。

I took a cursory look at the code so with that said I would recommend not refreshing your DataGridView. Conceptually speaking what you have in the DataGridView is correct so why refresh? If you are refreshing for what looks like doing totals then consider using a DataColumn Expression that is read-only, does the calculations for you. I have a simple example that shows this that does row totals and grand total. It does not use a DataSet but that does not matter as in your code you target the DataTable contained in the DataSet and add the DataColumn after loading your data and add it as a column to the DataGridView.

https://code.msdn.microsoft.com/DataGridView-calculating-b38045fa


这篇关于Datagridview不爽快的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆