Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Артефакты в WPF DataGrid?


Автор: Hobotanius 9.12.2011, 10:36
Очень странное поведение датагрида. Я просто не понимаю из-за чего это может происходить. Помогите плиз разобраться - где вообще копать.
http://s1.ipicture.ru/

Какой-то спонтанный сдвиг некоторых строк. Причём если покрутить колесо мыши так что строка уйдёт за пределы видимости, а потом покрутить обратно, то сдвиг может исчезнуть. А при повторном прокручивании колеса - будет сдвинута другая строка.
Вот:
http://s1.ipicture.ru/

И Вот:
http://s1.ipicture.ru/

Самое странное - я делаю эту программу несколько месяцев и только сейчас впервые увидел такой глюк! 

Автор: Hobotanius 9.12.2011, 11:07
На сколько я успезл заметить - одноразово лечится по кнопке обновить - обновление источника данных и перепривязка. Жду любых предположений, выложу код...

Автор: Gvozdin 9.12.2011, 12:42
В обычном DataGrid не встречал такого smile
Стили какие-нибудь применены к гриду или строкам?

Автор: Hobotanius 12.12.2011, 02:36
XAML:
Код

        <DataGrid Grid.Row="1" Name="dataGrid" Style="{StaticResource StyleDirectoryDataGrid}" MouseDoubleClick="dataGrid_MouseDoubleClick">
            <DataGrid.Resources>
                <Style TargetType="DataGridColumnHeader">
                    <EventSetter Event="PreviewMouseDown" Handler="DataGridColumnHeader_PreviewMouseDown" />
                </Style>
            </DataGrid.Resources>


App.xaml
Код

        <Style TargetType="DataGrid" x:Key="StyleDirectoryDataGrid">
            <Setter Property="AutoGenerateColumns" Value="True"/>
            <Setter Property="Margin" Value="2,4,2,12" />
            <Setter Property="IsReadOnly" Value="true" /> 
            <Setter Property="HeadersVisibility" Value="Column" />
            <Setter Property="Background" Value="#FFFFFF" />
            <Setter Property="GridLinesVisibility" Value="All" />
            <Setter Property="VerticalGridLinesBrush" Value="#DCE1E9" />
            <Setter Property="HorizontalGridLinesBrush" Value="#DCE1E9" />
            <Setter Property="SelectionUnit" Value="FullRow"/>
            <Setter Property="HeadersVisibility" Value="Column"/>
            <Setter Property="MinColumnWidth" Value="0" />
            <Setter Property="MaxColumnWidth" Value="700" />
            <Setter Property="CanUserReorderColumns" Value="False" />
            <Setter Property="SelectionMode" Value="Single" />
            <Setter Property="CellStyle">
                <Setter.Value>
                    <Style TargetType="DataGridCell">
                        <Style.Triggers>
                            <Trigger Property="DataGridCell.IsSelected" Value="true">
                                <Setter Property="Background" Value="#6A78B0" />
                                <Setter Property="Foreground" Value="#FFFF97"/>
                                <Setter Property="BorderBrush" Value="#6A78B0" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Setter.Value>
            </Setter>
            <Setter Property="ColumnHeaderStyle">
                <Setter.Value>
                    <Style TargetType="DataGridColumnHeader">
                        <Setter Property="HorizontalContentAlignment" Value="Left" />
                        <Setter Property="Height" Value="30" />
                        <Setter Property="Padding" Value="5" />
                    </Style>
                </Setter.Value>
            </Setter>
        </Style>



C# инициализация грида
Код

        #region Инициализация грида
        public void ReInitializeGrid()
        {
            if (!Properties.Settings.Default.AccessibleDataBase)
                return;

            try
            {
                using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.ConnectDatabaseString))
                {
                    SqlCommand command = new SqlCommand("select * from view_acts", connection);

                    connection.Open();
                    SqlDataReader reader = command.ExecuteReader();
                    _dataSource.Clear();
                    _dataSource.Load(reader);
                    reader.Close();
                    connection.Close();

                    Binding bind = new Binding();
                    dataGrid.DataContext = _dataSource;
                    dataGrid.SetBinding(DataGrid.ItemsSourceProperty, bind);
                }
            }
            catch { }
        }
        #endregion


Вот как-то так...

Автор: Kefir 12.12.2011, 16:58
Посмотрите на эту строку через Snoop - может что-то прояснится.
Если ничего не прояснится - сделайте изолированный проект где этот баг можно будет воспроизвести и выложите сюда.

По существу - никогда сам с таким багом не встречался, поэтому сказать что-то конкретное не могу. Стили ваши не рассматривал правда пока.

Автор: Gvozdin 13.12.2011, 20:24
Стили вроде ничего такого не должны давать smile
Можно временно конечно все настройки грида оставить по умолчанию и помотреть, вдруг всё же они.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)