Проверить дубликаты строк GridEX с Linq не работает

У меня есть два Януса 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 ответ

Попробуй это:

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

вместо:

     dtSelectedRows = firstGrid.GetDataSource().Clone();
Другие вопросы по тегам