0

我有一个datatable来自文件的数据 - 这将是ItemSource我的datagrid. 我datatable从数据库中得到一个相同的模式。我想比较这两个数据表,如果文件中有一些行存在于数据库中,我需要检查列的值是否相等。如果不是 - 我需要将Background单元格的颜色更改为红色。从我下面的代码中可能会更清楚:

 dgrSimcards.ItemsSource = excelCards.Table.DefaultView;

            var dbsource = new Tables.ExcelCards();
            DBConnection.FillData(dbsource.Table);
            if (!dbsource.HasRows) return;
            foreach(DataRow impRow in import.Table.Rows)
            {
                var row = dbsource.Table.AsEnumerable().FirstOrDefault(p =>string.Compare( p[dbsource.card_numberColumn.ColumnName].ToString() ,impRow[dbsource.card_numberColumn.ColumnName].ToString())==0);
                if (row != null)
                {
                    if (string.Compare(row[import.comentsColumn].ToString(), impRow[import.comentsColumn].ToString()) != 0)
                    {
                        //here is merging problem - i need to change background colour
                    }
                }


            }

我发现可以通过 BindingProperty 更改单元格的背景。但在我的情况下,我不知道该怎么做。是的,我真的很想比较客户端的数据。任何建议表示赞赏。

4

1 回答 1

0

我使用了一个额外的类:

  public CardDoubleRow(DataRow mainRow, DataRow otherRow)
           {
               _mainRow = mainRow;
               _otherRow = otherRow;
           }

 public object card_number
       {
           get { return _mainRow[ExcelSimCards.CardNumber]; }
       }

       public bool NumberEquals
       {
           get
           {

               return _otherRow != null
                      && card_number.ToString().Equals(_otherRow[ExcelSimCards.CardNumber]
                                                                       .ToString(),
                                                                   StringComparison.OrdinalIgnoreCase);
           }
       }
 foreach(DataRow impRow in import.Table.Rows)
            {
                var row = dbsource.Table.AsEnumerable().FirstOrDefault(p =>string.Compare( p[dbsource.card_numberColumn.ColumnName].ToString() ,impRow[dbsource.card_numberColumn.ColumnName].ToString())==0);
                result.Add(new CardDoubleRow(impRow, row));

            }
datagridcontrol.ItemsSource=result;

然后对于每一列,我用触发器绑定了一个特殊的单元格样式,例如:

DataTrigger tg = new DataTrigger()
                {
                    Binding = new Binding("NumberEquals"),
                    Value = false
                };
于 2013-05-21T07:38:48.307 回答