これは、データグリッドで構成されたサンプルコードです。ここでは、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++;}}}