Generally feel like I am using workarounds instead of the more intentional programming I want to be doing for these basic things that I am used to doing in other grids, it seems like I need a new custom GridViewCell or something there is a growing list of improvements I am making that I wish there were a better way to do.
The idea of seeing which cells are edited is cool, but it only seems to work notice the last change that was made for a cell. Since the edited style doesn't notice when the user undoes their changes to the true Original uncommitted value. Worse yet when edit events fire that don't actually change the value sometimes the cell is marked as un-edited even though it has changes. So far, I have been putting them in the tag property:
private void HandelPasting(object sender, GridViewClipboardEventArgs e)
{
foreach (GridViewCell cell in SelectedItems)
{
//store the original value so we can tell if we have just reverted to it.
cell.Tag = cell.Tag == null ? cell.Value : cell.Tag;
}
} {
foreach (GridViewCell cell in SelectedItems)
{
//store the original value so we can tell if we have just reverted to it.
cell.Tag = cell.Tag == null ? cell.Value : cell.Tag;
}
}
Then I adjust the background based on whether the value changed:
cell.Background = !newData.HasValueChanged(cell.Tag) ? CLEANBRUSH : DIRTYBRUSH;
//Bug in Telerik grid requires this to get the cell background updated.
Grid gridFromVisualTree = (Grid)VisualTreeHelper.GetChild(cell, 0) as Grid;
if (gridFromVisualTree != null)
{
gridFromVisualTree.Background = cell.Background;
}
Next I want to o set the cells(not the row or the header) tool tip with this original value. I am trying something like this:
GridViewRow RowFound = gridView.ChildrenOfType<GridViewRow>().Where(w => w.Item == cellInfo.Item).FirstOrDefault();
GridViewCellBase cellFound = RowFound.Cells.Where(c => c.Column == cellInfo.Column).FirstOrDefault();
Then I hope to provide a context menu or tool tip when there is an original value that will let the users undo, reverting to this original value,
It would be sweet to add another undo/redo button set at the grid level too that would let users cycle through their changes chronologically, zooming the grid to them and selecting the cells for them as they go back and forth...kind of like a version control system. I might even come up with a change report to show before and after values once users commit their saves.
I'll get this together and or de-scope where I can, but, I was hopping that by posting this, others might be able to help me a little and/or maybe some future version of the grid could deal with these things a little better.
The idea of seeing which cells are edited is cool, but it only seems to work notice the last change that was made for a cell. Since the edited style doesn't notice when the user undoes their changes to the true Original uncommitted value. Worse yet when edit events fire that don't actually change the value sometimes the cell is marked as un-edited even though it has changes. So far, I have been putting them in the tag property:
private void HandelPasting(object sender, GridViewClipboardEventArgs e)
{
foreach (GridViewCell cell in SelectedItems)
{
//store the original value so we can tell if we have just reverted to it.
cell.Tag = cell.Tag == null ? cell.Value : cell.Tag;
}
} {
foreach (GridViewCell cell in SelectedItems)
{
//store the original value so we can tell if we have just reverted to it.
cell.Tag = cell.Tag == null ? cell.Value : cell.Tag;
}
}
Then I adjust the background based on whether the value changed:
cell.Background = !newData.HasValueChanged(cell.Tag) ? CLEANBRUSH : DIRTYBRUSH;
//Bug in Telerik grid requires this to get the cell background updated.
Grid gridFromVisualTree = (Grid)VisualTreeHelper.GetChild(cell, 0) as Grid;
if (gridFromVisualTree != null)
{
gridFromVisualTree.Background = cell.Background;
}
Next I want to o set the cells(not the row or the header) tool tip with this original value. I am trying something like this:
GridViewRow RowFound = gridView.ChildrenOfType<GridViewRow>().Where(w => w.Item == cellInfo.Item).FirstOrDefault();
GridViewCellBase cellFound = RowFound.Cells.Where(c => c.Column == cellInfo.Column).FirstOrDefault();
((GridViewCell)GridViewCell).ToolTipCache =new ToolTip() { Content = "My hover text"};
It is weird, if I set the value in the immediate window, locals or a watch while I am debugging the value gets updated but I can't compile the project because:
Error 1 'Telerik.Windows.Controls.GridView.GridViewCell' does not contain a definition for 'ToolTipCache' and no extension method 'ToolTipCache' accepting a first argument of type 'Telerik.Windows.Controls.GridView.GridViewCell' could be found (are you missing a using directive or an assembly reference?)
It is weird, if I set the value in the immediate window, locals or a watch while I am debugging the value gets updated but I can't compile the project because:
Error 1 'Telerik.Windows.Controls.GridView.GridViewCell' does not contain a definition for 'ToolTipCache' and no extension method 'ToolTipCache' accepting a first argument of type 'Telerik.Windows.Controls.GridView.GridViewCell' could be found (are you missing a using directive or an assembly reference?)
Then I hope to provide a context menu or tool tip when there is an original value that will let the users undo, reverting to this original value,
It would be sweet to add another undo/redo button set at the grid level too that would let users cycle through their changes chronologically, zooming the grid to them and selecting the cells for them as they go back and forth...kind of like a version control system. I might even come up with a change report to show before and after values once users commit their saves.
I'll get this together and or de-scope where I can, but, I was hopping that by posting this, others might be able to help me a little and/or maybe some future version of the grid could deal with these things a little better.