【问题标题】:compare the content of 2 gridviews in one aspx page在一个 aspx 页面中比较 2 个 gridviews 的内容
【发布时间】:2010-12-22 21:20:00
【问题描述】:

我们需要比较 2 个相同的 gridview 的内容,并在第三个 gridview 中提取不同的行,这可行吗?

我尝试了很多但没有运气,请帮助我。

在我们的办公室,我们每天备份 ASP.net 应用程序 ms 访问后端

在接下来的几天里,我们需要评估对数据库表中记录所做的更改

每天结束时,我想比较 2 个 access 数据库,第一个数据库是昨天的备份,第二个数据库是今天的备份

我想到了以下算法,请仔细阅读并告诉我如何继续比较数据表/网格视图

我需要显示包含差异/更新/删除数据的行/单元格

comparing two ms access backend databases of an asp.net web application

【问题讨论】:

标签: asp.net web-applications gridview


【解决方案1】:

我的团队和 myseld 想通了

Imports System.Data
Imports System.Data.OleDb
Partial Class MoKoTrack
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim myDB = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|databaseName.mdb;Persist Security Info=True")

    Session("CurrentDB") = myDB


    myDB.open()
    Dim mytables = myDB.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, New Object() {})

    Dim CurrentTable As String

    For i = 1 To mytables.Rows.Count
        CurrentTable = mytables.Rows(i - 1).Item(2).ToString
        If CurrentTable.Contains("Backup") Then CompareTable(CurrentTable, mytables.Rows(i - 1).Item(3).ToString)
    Next i

    '        Dim myGrid As New GridView
    'myGrid.DataSource = mytables
    'myGrid.DataBind()
    'Me.Form.Controls.Add(myGrid)
    'myDB.Close()
End Sub

Sub CompareTable(ByVal BackupTableName As String, ByVal myPrimKey As String)

    Dim OriginalTable As New DataTable
    Dim BackupTable As New DataTable
    Dim ModificationsTable As New DataTable
    Dim AddedTable As New DataTable
    Dim DeletedTable As New DataTable

    Dim myDB = Session("CurrentDB")
    Dim FinalSQLString = "SELECT * FROM [" + BackupTableName + "]"
    Dim myDBCommand = New OleDbCommand(FinalSQLString, myDB)
    Dim myReader As IDataReader = myDBCommand.ExecuteReader()

    BackupTable.Load(myReader)

    Dim OriginalTableName = Left(BackupTableName, Len(BackupTableName) - 6)
    Dim FinalSQLString2 = "SELECT * FROM [" + OriginalTableName + "]"
    Dim myDBCommand2 = New OleDbCommand(FinalSQLString2, myDB)
    'Generate a temporary reader to get the number of cases
    Dim myReader2 As IDataReader = myDBCommand2.ExecuteReader()
    OriginalTable.Load(myReader2)

    Dim myPrimColumn(0) As DataColumn
    myPrimColumn(0) = OriginalTable.Columns(myPrimKey)
    OriginalTable.PrimaryKey = myPrimColumn
    Dim myPrimColumn2(0) As DataColumn
    myPrimColumn2(0) = BackupTable.Columns(myPrimKey)
    BackupTable.PrimaryKey = myPrimColumn2


    AddedTable = OriginalTable.Clone
    DeletedTable = OriginalTable.Clone
    ModificationsTable = OriginalTable.Clone
    ModificationsTable.PrimaryKey = Nothing

    Dim CurrentVal As String

    For i = 0 To OriginalTable.Rows.Count - 1
        CurrentVal = OriginalTable.Rows(i).Item(myPrimKey).ToString
        Dim foundRow As DataRow = BackupTable.Rows.Find(CurrentVal)
        If foundRow IsNot Nothing Then
            For t = 0 To OriginalTable.Columns.Count - 1
                If Not foundRow.Item(t).ToString = OriginalTable.Rows(i).Item(t).ToString Then
                    ModificationsTable.ImportRow(OriginalTable.Rows(i))
                    'ModificationsTable.Rows(ModificationsTable.Rows.Count - 1).Item(t) = ModificationsTable.Rows(ModificationsTable.Rows.Count - 1).Item(t) & "Modified"
                    ModificationsTable.ImportRow(foundRow)
                End If
            Next


        Else
            AddedTable.ImportRow(OriginalTable.Rows(i))
        End If

    Next

    For i = 0 To BackupTable.Rows.Count - 1
        CurrentVal = BackupTable.Rows(i).Item(myPrimKey).ToString
        Dim foundRow As DataRow = OriginalTable.Rows.Find(CurrentVal)
        If foundRow Is Nothing Then
            DeletedTable.ImportRow(OriginalTable.Rows(i))
        End If

    Next

    If AddedTable.Rows.Count > 0 Then
        Dim myLabel As New Label
        myLabel.Text = "<br/> The following records were added to table " & OriginalTableName & "<br/> <br/>"
        Me.form1.Controls.Add(myLabel)
        Dim myGrid As New GridView
        myGrid.DataSource = AddedTable
        myGrid.DataBind()
        Me.form1.Controls.Add(myGrid)
    End If

    If ModificationsTable.Rows.Count > 0 Then
        Dim myLabel As New Label
        myLabel.Text = "<br/> The following records were modified in table " & OriginalTableName & "<br/> <br/>"
        Me.form1.Controls.Add(myLabel)
        Dim myGrid As New GridView
        myGrid.DataSource = ModificationsTable
        myGrid.DataBind()
        Me.form1.Controls.Add(myGrid)
    End If

    If DeletedTable.Rows.Count > 0 Then
        Dim myLabel As New Label
        myLabel.Text = "<br/> The following records were deleted from table " & OriginalTableName & "<br/> <br/>"
        Me.form1.Controls.Add(myLabel)
        Dim myGrid As New GridView
        myGrid.DataSource = DeletedTable
        myGrid.DataBind()
        Me.form1.Controls.Add(myGrid)
    End If


End Sub

End Class

【讨论】:

    【解决方案2】:

    我通常使用 LINQ 比较它

    这会给你一个良好的开端

    var SearchResults1 = from u in YourDB.YourUserTable1
                        orderby u.YourColumn
                        select u;
    
    GridView1.DataSource = SearchResults1;
    GridView1.DataBind();
    
    var SearchResults2 = from u in YourDB.YourUserTable2
                            orderby u.YourColumn
                            select u;
    
    GridView2.DataSource = SearchResults2;
    GridView2.DataBind();
    
    var SearchResults3 = from u1 in SearchResults2
                            where !(from u2 in SearchResults1
                                    select u2.YourTablePrimaryKey).Contains(u1.YourTablePrimaryKey)
                            orderby u1.YourColumn
                            select u1;
    
    GridView3.DataSource = SearchResults3;
    GridView3.DataBind();
    

    如果您想比较 SearchResults1 中的内容而不是 SearchResults2 中的内容,您可以进一步详细说明 SearchResults 3,反之亦然

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      相关资源
      最近更新 更多