使用Linq检查重复的GridEX行不起作用

时间:2014-01-11 14:41:40

标签: c# linq grid janus

我有两个Janus GridEX。单击特定按钮时,我想将第一个网格的行添加到另一个网格;但是我想检查一下这些行在第二个网格中是否存在,所以我在linq中使用了这个代码块:

    DataTable dtSelectedRows = new DataTable();
    dtSelectedRows = firstGrid.GetDataSource().Clone();
    foreach (GridEXRow row in rows)
    {
        DataRow dr = ((DataRowView)row.DataRow).Row;
        if (dtSelectedRows.AsEnumerable().Count() > 0)
        {        
            if (dtSelectedRows.AsEnumerable().Where(t => t.Field<Int32>("myColumn") == Convert.ToInt32(dr["myColumn"])).Count() == 0)
            {
                dtSelectedRows.ImportRow(dr);
            }
        }
        else
            dtSelectedRows.ImportRow(dr);

        }
    }
    secondGrid.SetDataSource(dtSelectedRows);

但不幸的是它没有用,dtSelectedRows总是空的。所以我强迫将块重写为:

    GridEXRow[] rows = firstGrid.GetCheckedRows();
    DataTable dtSelectedRows = new DataTable();
    dtSelectedRows = firstGrid.GetDataSource().Clone();
    foreach (GridEXRow row in rows)
    {
        if (row.RowType == Janus.Windows.GridEX.RowType.Record)
        {        
            DataRow dr = ((DataRowView)row.DataRow).Row;
            bool rowExists = false;
            foreach (DataRow r in dtSelectedRows.Rows)
            {
                if (Convert.ToInt32(r["myColumn"]) == Convert.ToInt32(dr["myColumn"]))
                {
                    rowExists = true;
                    break;
                }
            }

            if (!rowExists)
                dtSelectedRows.ImportRow(dr);}
    }
    secondGrid.SetDataSource(dtSelectedRows);

幸运的是它刚刚起作用。那么如何更正第一个代码块?

1 个答案:

答案 0 :(得分:0)

试试这个:

     dtSelectedRows = firstGrid.GetDataSource().AsEnumerable().ToList();

而不是:

     dtSelectedRows = firstGrid.GetDataSource().Clone();