DataGrid в CellTemplate глюки
От: Аноним  
Дата: 20.02.11 16:13
Оценка:
Есть DataGrid все настройки по умолчанию, кроме AutoGenerateColumns, который установлен в false.
У DataGrid 3 колонки, одна из которых Template содержащая точно такую же по структуре DataGrid ( отличие только в привязке данных) всего в иерархии DataGrid получается 2 уровня, т.е. один основной и содержит в себе 2 DataGrida

При работе возникают следующие проблемы :

1) глючит вертикальная прокрутка, а именно если промотать в самый конец то видно что это не конец данных, но прокрутить ниже уже нельзя. А также ползунок прокрутки по мере прокрутки постоянно меняет свой размер ( как будто изменяется количество элементов , хотя оно постоянно ).

2) Данные на 2м уровне ( DataGrid который выводит список c_list ) — дублируются при отображении, причем если их выделять то дубликаты не выделяются вместе, выделяется только 1 из дубликатов, другой просто отображается как будто его не выделяли.
Т.е. вместо
Значение1
Значение2

выводится

Значение1
Значение1
Значение2
Значение2

при выделении выделяются только 1я и 3я строка а 2я и 4я — не реагируют никак на выделение.

3) Еще хотелось бы реализовать чтобы при клике на строке DataGridа производилось сворачивание/разворачивание ( Visibility=Visible/Collapsed) вложенных в эту строку DataGridов. Как это лучше реализовать ?

public class A
{
   public string a1;
   public string a2;
   public B[] b_list;
}

public class B
{
   public string b1;
   public string b2;
   public C[] c_list;
}

public class C
{
  public string c1;
  public string c2
}

public static A[] datasource = new A[]
{
  new A{ ... },
  ....
  new A{ ... },
}


при нажатии на кнопку делается

dataGrid1.ItemSource = datasource;


<DataGrid Name="dataGrid1" ... >
   <DataGrid.Columns>
         <DataGridTextColumn Binding={ a1}/>
         <DataGridTextColumn Binding={ a2}/>
         <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataGrid ItemsSource={Binding b_list}>
                      <DataGrid.Columns>
                        <DataGridTextColumn Binding={ b1}/>
                        <DataGridTextColumn Binding={ b2}/>
                        <DataGridTemplateColumn>
                           <DataGridTemplateColumn.CellTemplate>
                                 <DataGrid ItemsSource={Binding c_list}>
                                 <DataGrid.Columns>
                                      <DataGridTextColumn Binding={ c1}/>
                                      <DataGridTextColumn Binding={ c2}/>
                                 </DataGrid.Columns>                    
                                 </DataGrid>
                           <DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                     </DataGrid.Columns>                    
                </DataGrid>
            </DataGridTemplateColumn.CellTemplate>
         </DataGridTemplateColumn>
   </DataGrid.Columns>
</DataGrid>
Re: DataGrid в CellTemplate глюки
От: B0FEE664  
Дата: 23.02.11 14:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть DataGrid...

А>При работе возникают следующие проблемы :
А>1) глючит вертикальная прокрутка, а именно если промотать в самый конец то видно что это не конец данных, но прокрутить ниже уже нельзя. А также ползунок прокрутки по мере прокрутки постоянно меняет свой размер ( как будто изменяется количество элементов , хотя оно постоянно ).
А>2) Данные на 2м уровне ( DataGrid который выводит список c_list ) — дублируются при отображении...

Я не знаю, что такое DataGrid и основательно забыл .Net, но судя по описанным симптомам — это типичная картина, которая возникает, когда пытаются изменить данные list'a в процессе отрисовки. Например, если пытаться изменить размер строки или количество строк или количество внутренних элементов в строке в момент, когда контрол пытается отобразить данные на экране, то , в большинстве случаев можно увидить схожую картину. Обойти это можно либо фиксацией размера строки , либо заполнением всех данных до отрисовки. В некоторых гридах бывают специальные events для заполнения данных. Дак вот , в этих эвентах не рекомендуется менять структуру грида.
Я угадал?
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.