0

これは、データグリッドで構成されたサンプルコードです。ここでは、2つのコンボボックスの列(ステータスと現在のステータス)を、データグリッドで変更されたステータスに応じてカウントする必要があります。

<Window.Resources>
    <staticData:StatusList x:Key="StatusList"/>
</Window.Resources>

<Grid>
    <my:DataGrid x:Name="dgData" AutoGenerateColumns="False" Margin="0,-6,0,6">
        <my:DataGrid.Columns>
            <my:DataGridTextColumn Binding="{Binding Subject}" Header="Subject" Width="*"/>
            <my:DataGridTemplateColumn Header="Status" Width="100">
                <my:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Status}"/>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>

                <my:DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox Height="22" 
                                  ItemsSource="{StaticResource StatusList}"
                                  SelectedItem="{Binding Status}"/>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellEditingTemplate>

            </my:DataGridTemplateColumn>
            <my:DataGridTextColumn Binding="{Binding RaisedBy}" Header="Raised By" Width="100"/>
            <my:DataGridTemplateColumn Header="PresentStatus" Width="100">
                <my:DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox Height="22" 
                                  ItemsSource="{StaticResource StatusList}"
                                  SelectedItem="{Binding Status}"/>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellEditingTemplate>
            </my:DataGridTemplateColumn>
        </my:DataGrid.Columns>
    </my:DataGrid>
</Grid>`

C#コード

public class StatusList : List<string>
    {
        public StatusList()
        {
            this.Add("Assigned");
            this.Add("Closed");
            this.Add("In Progress");
            this.Add("Open");
            this.Add("Resolved");
        }
    }

最後に、データグリッドデータを保存するときに、ステータスをカウントする必要があります。ステータス値、つまり同様の値が複数回選択された場合は、単一のカウントとして返されます。たとえば、3つのコンボボックスが選択され、1がオープン、2が解決済み、3がオープンであるとします。オープンの場合、同じ値を複数回選択すると単一の値(またはカウント)としてカウントされるため、カウントは2になります。

編集:コンボボックスのステータスは編集可能であるため、ここでコードを試しました。変更した場合、値と繰り返し値は1つの値としてカウントされますが、よくわかりません。

bool isDuplicate;
int count;
for (int nbRow = 0; nbRow < dgData.Rows.Count; nbRow++)
{
    for (int nbRowCompare = nbRow; nbRowCompare < dgData.Rows.Count; nbRowCompare++)
    {
        isDuplicate = true;
        for (int nbCol = 0; nbCol < dgData.Rows[nbRow].Cells.Count; nbCol++)
        {
            if (dgData[nbCol, nbRow].Value != dgData­[nbCol, nbRowCompare])
            {
                isDuplicate = false;
                count++;
                break;     //Exit for each column if they are not duplicate
            }
        }

        if (isDuplicate)
        {
            //Do something
            count++;
        }
    }
}

コンボボックスのステータスは編集可能であるため、ここでコードを試しました。値を変更し、繰り返される値を1つの値としてカウントする必要がありますが、わからない場合は、この方法で助けてください。

bool isDuplicate; int count; for(int nbRow = 0; nbRow < dgData.Rows.Count; nbRow++){for(int nbRowCompare = nbRow; nbRowCompare < dgData.Rows.Count; nbRowCompare++){isDuplicate = true; for(int nbCol = 0; nbCol < dgData.Rows[nbRow].Cells.Count; nbCol++) {if(dgData[nbCol, nbRow].Value != dgData­[nbCol, nbRowCompare]){isDuplicate = false; count++;break; //Exit for each column if they are not duplicate }}if(isDuplicate){//Do something count++;}}}

4

1 に答える 1

0

私があなたの質問を正しく理解している場合はStatus、DataGridに表示されるさまざまな行で使用される個別の値の数を数える必要があります。

DataGridは、おそらくObservableCollectionテーブルの各行に1つずつ、オブジェクトの(または他のコレクション)を表示しています。(コードサンプルには値を表示していませんが、値がItemsSourceあると想定します。)このリストがと呼ばれitems、がある場合はusing System.Linq;、次を使用して個別のステータスのリストを取得できます。

List<string> distinctStatuses = items.Select(item => item.Status)
                                     .Distinct()
                                     .ToList();

カウントのみが必要な場合は、これをさらに単純化できます。

int distinctStatusCount = items.Select(item => item.Status).Distinct().Count();

PresentStatus同じ列にバインドされているStatusため、同じデータしか表示されないため、列についてはよくわかりません。PresentStatusDataGridの列にも。がありませんCellTemplate

于 2012-07-23T21:14:02.697 に答える