0

DevExpress XAF を使用しています。リストビューがあります。リスト ビューでは、ユーザーは複数の行を選択できます。特定の列/プロパティのすべてのセルが同じ値を保持していることを確認する必要があります。それ以外の場合は、例外をスローする必要があります。

たとえば、ユーザーが 3 つの行を選択した場合、Trucker 列の 3 つの値が同じであることを確認する必要があります。これまでの私のコードは次のとおりです。

 if (lr.PurchaseLoad.Trucker != null)
 {
     if (lr.PurchaseLoad.Trucker.Name == lr.PurchaseLoad.Trucker.Name == true)//Is this correct?
     {

             // What am I comparing here?

     }
   else if (lr.PurchaseLoad.Trucker.Name.Equals(lr.PurchaseLoad.Trucker.Name) == false)
    {
    throw new UserFriendlyException("Please make sure your selected records have the same Trucker assigned.");                       
    }


  }
4

1 に答える 1

1

LINQ を使用して、次のようなことを試してください (lrあなたが であると仮定しますListView):

var distinctNames = lr.SelectedItems.Cast<PurchaseLoad.Trucker>()
                                    .Where(x => x != null)
                                    .Select(x => x.Name)
                                    .Distinct()
                                    .Count();

if (distinctNames == 0)
    throw new UserFriendlyException("Make at least one selection.");
else if (distinctNames > 1)
    throw new UserFriendlyException("Please make sure your selected records have the same Trucker assigned.");

DevExpressコントロールは使っていません。以下を使用して上記を調整する必要があるようです。

... = lr.SelectedObjects.Cast<PurchaseLoad.Trucker>()...

元のコードでは、構文がオフになっています。以下を使用して 2 つの値を比較します。

if (value1 == value2)

if (value1 != value2)

いいえ:

if (value1 == value2 == true)

if (value1 == value2 == false)

最終的な作業ソリューション (EB のコメントから):

foreach (LoadRelationship trucker in View.SelectedObjects)
{
    var distinctNames =
        View.SelectedObjects.Cast<LoadRelationship>()
                            .Where(x => x != null)
                            .Select(x => x.PurchaseLoad.Trucker.Name)
                            .Distinct()
                            .Count();

    if (distinctNames > 1)
        throw new UserFriendlyException(
            "Please make sure your assigned Truckers are the same.");
}
于 2014-05-14T21:50:13.353 に答える