Je souhaite modifier la couleur de la cellule dans une grille de données lorsque l'utilisateur modifie le texte ou le contenu de cette cellule.
J'utilise WPF en C #.
J'ai une simple grille de données:
<DataGrid x:Name="dataGrid1" Grid.RowSpan="2" Margin="5" ItemsSource="{Binding Source=Horreos}" KeyDown="dataGrid1_KeyDown" SelectedCellsChanged="dataGrid1_SelectedCellsChanged"> <DataGrid.Columns > </DataGrid.Columns> </DataGrid>
This events: keydown et selectedcellschange sont des tests pour changer ma cellule de couleur. Dans le .cs j'ai essayé de changer le cel .... mais j'ai échoué.
J'ai besoin d'un événement qui est publié lorsque le contenu change
Réponses:
0 pour la réponse № 1Définissez un comportement, le moyen le plus simple consiste à utiliser Blend. Je fournis un exemple contre une grille de données sur mon article de blog: Xaml: Ajout de comportements de visibilité utilisant Blend à un DataGrid pour WPF ou Silverlight
0 pour la réponse № 2
Résolu:
private void dataGrid1_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
DataGridCell gridCell = null;
try
{
gridCell = GetCell(dataGrid1.SelectedCells[0]);
}
catch (Exception)
{
}
if (gridCell != null)
gridCell.Background = Brushes.Red;
}
public DataGridCell GetCell(DataGridCellInfo dataGridCellInfo)
{
if (!dataGridCellInfo.IsValid)
{
return null;
}
var cellContent = dataGridCellInfo.Column.GetCellContent(dataGridCellInfo.Item);
if (cellContent != null)
{
return (DataGridCell)cellContent.Parent;
}
else
{
return null;
}
}
private void MyDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
DataGrid grid = sender as DataGrid;
e.Row.MouseEnter += (s, args) => Row_MouseEnter(s, grid);
e.Row.MouseLeave += (s, args) => Row_MouseLeave(s, grid);
}
void Row_MouseLeave(object sender, DataGrid grid)
{
DataGridRow row = sender as DataGridRow;
grid.SelectedIndex = -1;
}
void Row_MouseEnter(object sender, DataGrid grid)
{
DataGridRow row = sender as DataGridRow;
grid.SelectedIndex = row.GetIndex();
}
Lorsque l'utilisateur a fini d'éditer, la cellule devient rouge.
<DataGrid x:Name="dataGrid1" Grid.RowSpan="2" SelectionUnit="CellOrRowHeader"
Margin="5" ItemsSource="{Binding Source=Source}" LoadingRow="MyDataGrid_LoadingRow" CellEditEnding="dataGrid1_CellEditEnding">
<DataGrid.Columns>