1

dtData1とdtData2という2つのデータテーブルがあります。両方のデータテーブルにレコードがあり、両方のデータテーブルを比較し、新しいデータテーブルを作成したいと思います。たとえば、dtData3とuniqeレコードを使用します。

仮定:dtData1には10個のレコードがあり、dtData2には50個のレコードがありますが、7個のレコードがdtData1と同じであるという点で、dtData2にあるレコードはすべてです。したがって、ここではdtData3に一意のレコードが必要です。つまり、dtData3に43レコードのみが必要です。

datatableで重複がどこにあるかはわかりません。また、重複がない可能性や、すべての重複レコードがある可能性もあります。

したがって、dtData3では一意のレコードが必要です

誰か助けてください。

4

5 に答える 5

5
var dtData3 = dtData2.AsEnumerable().Except(dtData1.AsEnumerable(), DataRowComparer.Default);
于 2012-08-08T10:08:49.860 に答える
1

これを使用してください..おそらくそれはあなたを助けるでしょう。

2つのデータテーブルがあるとします

DataTable dt1 = new DataTable();
            dt1.Columns.Add("Name");
            dt1.Columns.Add("ADD");
            DataRow drow;
            for (int i = 0; i < 10; i++)
            {
                drow = dt1.NewRow();
                drow[0] = "NameA" + 1;
                drow[1] = "Add" + 1;
                dt1.Rows.Add();
            }
            DataTable dt2 = new DataTable();
            dt2.Columns.Add("Name");
            dt2.Columns.Add("ADD");
            DataRow drow1;
            for (int i = 0; i < 11; i++)
            {
                drow1 = dt2.NewRow();
                drow1[0] = "Name" + 1;
                drow1[1] = "Add" + 1;
                dt2.Rows.Add();
            }

今あなたの問題を解決するために電話してください:-

DataTable d3 = CompareTwoDataTable(dt1, dt2);

メソッドは次のようなものです;-

public static DataTable CompareTwoDataTable(DataTable dt1, DataTable dt2)
        {
            dt1.Merge(dt2);
            DataTable d3 = dt2.GetChanges();

            return d3;
        }
于 2012-08-08T11:32:54.727 に答える
0
public DataTable CompareTwoDataTable(DataTable dtOriginalTable, DataTable dtNewTable, ArrayList columnNames)
    {
        DataTable filterTable = new DataTable();
        filterTable = dtNewTable.Copy();
        string filterCriterial;
        if (columnNames.Count > 0)
        {
            for (int iNewTableRowCount = 0; iNewTableRowCount < dtNewTable.Rows.Count; iNewTableRowCount++)
            {
                filterCriterial = string.Empty;
                foreach (string colName in columnNames.ToArray())
                {
                    filterCriterial += colName.ToString() + "='" + dtNewTable.Rows[iNewTableRowCount][colName].ToString() + "' AND ";
                }
                filterCriterial = filterCriterial.TrimEnd((" AND ").ToCharArray());
                DataRow[] dr = dtOriginalTable.Select(filterCriterial);
                if (dr.Length > 0)
                {
                    filterTable.Rows[filterTable.Rows.IndexOf(filterTable.Select(filterCriterial)[0])].Delete();
                }
            }
        }
        return filterTable;
    }
于 2013-03-07T05:22:21.493 に答える
0

まず、配列変数を作成して、datatable3の一意の列値を保存します。2番目のグリッドビュー行でForeachループを使用します。一致する場合は配列値に保存し、一致する場合は配列に保存します。そして、3番目のグリッドビューでアタッチして表示します。

例えば

string[] name = new string[4];

int i=0,j=0;
foreach(GridViewRows gv in GridView1.rows)
{
    if(gv.Cells[0].Text == GridView2.Rows[i].Cells[0].Text)' //if match
    {
       // dnt save
    } 
    else'  //if dnt match save in array for further use
    {
        name[j] = gv.Cells[0].Text;
        j= j++;
    }
    i=i++;
}

配列"name"に一意の値を保存した後...3番目のGridviewのDataBound中に3番目のGridviewにバインドするこのメソッドを追加します...

Private void GridView3_RowDataBound(object sender,EventArgs e)
{
    if(e.Row.RowState == DataControlState.DataRow)
    {
        foreach(string nm in name)
        {
            e.Rows.Cells.Add(name);      
        }
    }
}
于 2012-08-08T11:34:37.350 に答える
0

次に、どこで比較する必要がdtData1ありdtData2ますか?代わりに、インデックス7dtData2からdtData3開始してコンテンツをコピーできます。

于 2012-08-08T10:10:58.080 に答える