0

私はdatatableファイルからデータを持っています - それはItemSource私のdatagrid. そしてdatatable、データベースから同じスキーマを取得しています。この 2 つのデータテーブルを比較したいのですが、ファイルに DB に存在する行がいくつかある場合は、列の値が等しいことを確認する必要があります。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 に答える