【问题标题】:How to refresh a dataGridView如何刷新dataGridView
【发布时间】:2012-01-31 18:28:53
【问题描述】:

InsertUpdate 之后刷新DataGridView 控件时遇到问题。源代码:

从数据表中的表中获取所有行并设置到数据源:

Dim dt1 as DataTable = GetData("SELECT * FROM CLAIMSTATE ")
dataGrid.DataSource = dt1

如果 ID 被赋值则更新事件,如果不是则插入:

Private Sub dataGrid_RowLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dataGrid.RowLeave

Dim row As DataGridViewRow = CType(sender, DataGridView).Rows(e.RowIndex)
  Dim query As New StringBuilder("")
  If row.Cells(0).Value & "" = "" Then
    query.Append("INSERT INTO CLAIMSTATE ")
    query.Append("(CST_CODE, CST_LABEL, CST_POINTS)")
    query.Append("VALUES ")
    query.Append("(?, ?, ?)")
  Else
    query.Append("Update CLAIMSTATE ")
    query.Append("SET CST_CODE = ?, ")
    query.Append("CST_LABEL = ?, ")
    query.Append("CST_POINTS = ? ")
    query.Append("WHERE CST_ID = ? ")
  End If
  Dim command As New OdbcCommand(query.ToString(), con)
  command.Parameters.Add("@cst_code", OdbcType.Char).Value = row.Cells(1).Value
  command.Parameters.Add("@cst_label", OdbcType.NVarChar).Value = row.Cells(2).Value
  command.Parameters.Add("@cst_points", OdbcType.Decimal).Value = row.Cells(3).Value
  command.Parameters.Add("@cst_id", OdbcType.BigInt).Value = row.Cells(0).Value

  Dim res As Integer = ExecuteNonQuery(command)
End Sub

Public Function GetData(ByRef sqlQuery As String) As DataTable
    Dim command As New OdbcCommand(sqlQuery, con)
    Try
      If con.State = ConnectionState.Closed Then
        con.ConnectionString = conString
        con.Open()
      End If
      Using dr As OdbcDataReader = command.ExecuteReader()
        Dim dt As New DataTable()
        dt.Load(dr)
        Return dt
      End Using
      'con.Close()
    Catch ex As Exception
      MsgBox(ex.Message)
      con.Close()
      Return Null
    End Try
  End Function

Public Function ExecuteNonQuery(ByRef command As OdbcCommand) As Integer
Dim result As Integer = 0
If con.State = ConnectionState.Closed Then
  con.ConnectionString = conString
  con.Open()
End If
'Dim command As New OdbcCommand(sqlQuery, conn)
Try
  'command.Connection = con
  'Dim cmd As New OdbcCommand( sqlQuery, conn)
  result = command.ExecuteNonQuery()
Catch
  result = 0
  If con IsNot Nothing Then
    con.Close()
    command.Dispose()
  End If
Finally
  command.Dispose()
End Try
Return result
End Function

我尝试从表中获取所有记录并在方法结束时再次设置数据源,但它不起作用。

如果我输入代码:

dataGrid.Rows.Clear()
dataGrid.Columns.Clear()
dt1 = GetData("SELECT * FROM CLAIMSTATE ")
dataGrid.DataSource = dt1

在事件方法 RowLeave 结束时我收到此错误:

"操作无效,因为它会导致对 SetCurrentCellAddressCore 函数"

在 dataGrid.Rows.Clear() 上,但是如果我删除行代码 Rows.Clear() 和 Columns.Clear(),执行 dataGrid.DataSource = dt1 后的调试光标返回到事件方法的开头并执行一些在我收到一些错误“...对 SetCurrentCellAddressCore 函数的可重入调用”之后再次编码!

请帮帮我!

【问题讨论】:

    标签: vb.net datagridview odbc datasource ibm-midrange


    【解决方案1】:

    这是我用来连接搜索我的 GridView 的 C# 类。我认为你需要的应该是相似的。

        protected void lbSearch_Click(object sender, EventArgs e)
        {
            if (txtSearch.Text.Trim().Length > 0)
            {
                odsInbox.FilterExpression =
                    string.Format("(l_name LIKE '*{0}*') OR (f_name LIKE '*{0}*') OR (title LIKE '*{0}*')",
                    txtSearch.Text);
            }
            else
            {
                odsInbox.FilterExpression = string.Empty;
            }
    
            gvInbox.DataBind();
        }
    
        protected void lbClear_Click(object sender, EventArgs e)
        {
            odsInbox.FilterExpression = string.Empty;
            txtSearch.Text = "";
            gvInbox.DataBind();
        }
    

    我希望这能让你走上正轨。

    【讨论】:

    • DataGridView 上的DataSource 没有Clear() 和Add() 方法。任何人都有其他想法我可以如何刷新 datagridview?
    • 我找到了这个页面:stackoverflow.com/questions/2760657/…我如何在 vb.net 中写这个:BeginInvoke(new Action(delegate { dataGrid.DataSource = dt1; }));
    • @wertyk 对不起。 GridView...不是 ReportViewer。我会为此更新问题。
    • 问题是我没有绑定表:(
    【解决方案2】:

    为了解决这个问题,我使用了 OdbcDataAdapter。我使用 adapter.Update(dataTable) 保存所有更改,然后再次填充数据表:adapter.fill(dataTable)。

    【讨论】:

      猜你喜欢
      • 2015-06-25
      • 1970-01-01
      • 2012-01-02
      • 2013-08-18
      • 1970-01-01
      • 2020-09-23
      • 2015-09-03
      相关资源
      最近更新 更多