Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Подскажите плиз по RowDetails  [new]
Iber
Member

Откуда:
Сообщений: 277
Сделал свой datagrid, в котором уже поумолчанию есть вот такой столбец:
<sdk:DataGrid.Columns>
 <sdk:DataGridTemplateColumn Width="30" IsReadOnly="True" CanUserReorder="False" CanUserResize="False" CanUserSort="False" Header="*">
 <sdk:DataGridTemplateColumn.CellTemplate>
 <DataTemplate>
 <Grid ToolTipService.ToolTip="Подробно">
 <sdk:Label Unloaded="Label_Unloaded" HorizontalAlignment="Center" Foreground="CornflowerBlue"  VerticalAlignment="Center" Content="+"></sdk:Label>
 <Border Background="Transparent" MouseLeftButtonDown="CheckBox_Click">
 </Border>
 </Grid>
 </DataTemplate>
 </sdk:DataGridTemplateColumn.CellTemplate>
 </sdk:DataGridTemplateColumn>
 </sdk:DataGrid.Columns>
вобшем задумывалось, что по клику на контент ячейки этого столбика, будет показываться RowDetails соответсвующей строки, ну в итоге что то подобное и получилось:

 private void CheckBox_Click(object sender, RoutedEventArgs e)
        {
            // the original source is what was clicked. For example
            // a button.
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            // iteratively traverse the visual tree upwards looking for
            // the clicked row.
            while ((dep != null) && !(dep is DataGridRow))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }
            // if we found the clicked row
            if (dep != null && dep is DataGridRow)
            {
                // get the row
                DataGridRow row = (DataGridRow)dep;

                // change the details visibility
                if (row.DetailsVisibility == Visibility.Collapsed)
                {
                    row.DetailsVisibility = Visibility.Visible;
                }
                else
                {
                    row.DetailsVisibility = Visibility.Collapsed;
                }
            }
        }
здесь отрабатывает нормально. Но появилась другая проблема: при скролинге, или допустим каких нибудь рандомных кликах по гриду(может быть и не случайных, но природу возникновения ошибки я так и не смог определить) сбрасывался или контент ячейки в моем столбике для показа RowDetails на дефалтный или же RowDetails вовсе закрывался, частично это решилось, когда я сделал таблицу и столбики IsReadOnly="True", но проблема при скролинге осталась прежней, в итоге я сделал статический контент в моём Label, тоесть если он раньше менялся с "+" на "-", то сейчас не меняется, из за этого немного не удобно работать.
Позже я подумал, что можно просто закрывать RowDetails самому по событию Unloaded в метке и тогда сброс ее контента будет вполне логичным, но и тут неудача, как я понял, я правильно опредляю Row в хендлере этого(Unloaded) события, так как row.GetIndex().ToString()) возвращает верный индекс, Но row.Visibility всегда Collapsed, даже когда он был открыт до Unloaded, и когда допустим скролю обратно на эту строку RowDetails если был открытым прежде таким же и остается, грубо говаря row.Visibility = Visibility.Collapsed; не дает никаго эффекта.
29 ноя 11, 10:02    [11675578]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз по RowDetails  [new]
Руки-крюки
Member

Откуда:
Сообщений: 681
Iber,

А чем это не подходит?

            <DataGrid.RowDetailsTemplate>
                <DataTemplate>
                     .....................
                </DataTemplate>
            </DataGrid.RowDetailsTemplate>
1 дек 11, 22:38    [11692850]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз по RowDetails  [new]
thunder2
Member

Откуда:
Сообщений: 380
Iber,

Попробуйте использовать DataTrigger в шаблоне вашего столбца. При клике на контент столбца, пусть устанавливается некоторое значение (например true - показывать детали, false - скрыть) какому-нить полю. Триггер сработает на это значение и отобразить вам RowDetail. Должно работать корректно.
2 дек 11, 01:34    [11693261]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз по RowDetails  [new]
thunder2
Member

Откуда:
Сообщений: 380
Руки-крюки
Iber,

А чем это не подходит?

            <DataGrid.RowDetailsTemplate>
                <DataTemplate>
                     .....................
                </DataTemplate>
            </DataGrid.RowDetailsTemplate>

Это не решит проблему. Это всего лишь шаблон, он определяет как надо расположить элементы и как их группировать, не более того.
2 дек 11, 01:36    [11693263]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить