Diskuze: WPF, C#, datagrid, txtblock, binding
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Michal Štěpánek:28.9.2020 0:09
Jaký máš důvod použít AutoGenerateColumns="True"? Já používám
vždy "False", protože si můžu kterýkoliv sloupec nastavit přesně podle
potřeb konkrétní situace...
Máš na tom textblocku nastaveno mode "TwoWay"?
Ježek Vít :28.9.2020 20:11
Pokud mám AutoGenerate na False, tak mi nejde manuálně třídit sloupce po kliknutí v záhlaví sloupce.
<DataGrid x:Name="DataGridUzivatele" Margin="8" BorderThickness="1" BorderBrush="Black"
ScrollViewer.VerticalScrollBarVisibility="Visible" Grid.Row="3" Grid.Column="1" Background="#FFE5E5E5"
AlternatingRowBackground="LightGray" RowHeight="20" HorizontalContentAlignment="Center"
IsSynchronizedWithCurrentItem="False" AutoGenerateColumns="False" IsReadOnly="True"
SelectionMode="Single" IsManipulationEnabled="False" >
Zbytek už jsem vyřešil. Nevím jak je jsem toho docílil, ale měl jsem dva TextBlock, které odebírali IDuzivatele, ale jen jeden byl správný a já dál používal ten špatný :-/ MEA CULPA.
Teď snad jen, zda existuje způsob, jak mít AutoGenerate=False a zároveň, aby šlo i ručně třídit sloupce na kliknutí do záhlaví?
Michal Štěpánek:28.9.2020 20:16
Vzdycky mám false a třídí mi to sloupce bez problémů.
Ježek Vít :3.10.2020 21:20
Můžu poprosit, pořád mi nejde třídit sloupce kliknutím na záhlaví sloupce.
Do datagridu posílám data bez udání jakýchkoliv vlastností datagridu. Ty popisuji jen v XAMLu.
<DataGrid x:Name="DataGridPacienti" Margin="8" BorderThickness="1" BorderBrush="Black"
ScrollViewer.VerticalScrollBarVisibility="Visible" Grid.Row="3" Grid.Column="1" Background="#FFE5E5E5"
AlternatingRowBackground="LightGray" RowHeight="20" HorizontalContentAlignment="Center"
AutoGenerateColumns="False" IsReadOnly="True" SelectionMode="Single" MouseDoubleClick="BtnNovyZaznam_MouseDoubleClick" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Příjmení" Width="SizeToCells" MinWidth="70" IsReadOnly="False" CanUserSort="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Příjmení, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
.......
Opravdu netuším, kde by mohl být zakopaný pes.
Michal Štěpánek:5.10.2020 8:35
Abych nemusel vypisovat vlastnosti pro každý DataGrid, mám to v šabloně (Application.Resources)
<Style x:Key="GridSet" TargetType="DataGrid">
<Setter Property="FontSize" Value="15"/>
<Setter Property="AutoGenerateColumns" Value="False"/>
<Setter Property="AlternatingRowBackground" Value="AntiqueWhite"/>
<Setter Property="HeadersVisibility" Value="Column"/>
<Setter Property="GridLinesVisibility" Value="Horizontal"/>
<Setter Property="VerticalGridLinesBrush" Value="Silver"/>
<Setter Property="HorizontalGridLinesBrush" Value="Silver"/>
<Setter Property="SelectionMode" Value="Single"/>
<Setter Property="SelectionUnit" Value="FullRow"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="BorderBrush" Value="Blue"/>
<Setter Property="Height" Value="Auto"/>
<Setter Property="Width" Value="Auto"/>
<!--<Setter Property="Margin" Value="5"/>-->
</Style>
a samotný datagrid mám třeba takto:
<DataGrid Name="DgPenzion" Style="{StaticResource GridSet}" ItemsSource="{Binding PensList}" Grid.Row="3" Grid.Column="0" Margin="5"
Height="auto" SelectedItem="{Binding SelectedRoom}" HorizontalAlignment="Left">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding RoomId}" Visibility="Hidden"/>
<DataGridTextColumn Header="Byt" Binding="{Binding RoomNumber}" Width="70" CellStyle="{StaticResource CenterCell}"/>
<DataGridTextColumn Header="Popis" Binding="{Binding Description}" Width="200"/>
<DataGridTemplateColumn Header="Internet" CellStyle="{StaticResource CenterCell}" Width="auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="ChbConnect" IsChecked="{Binding IsConnected}" IsEnabled="False"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="PatchPanel" Binding="{Binding PatchPanel}" Width="90" CellStyle="{StaticResource CenterCell}"/>
<DataGridTextColumn Header="PP-port" Binding="{Binding PatchPanelPort}" Width="70" CellStyle="{StaticResource CenterCell}"/>
<DataGridTextColumn Header="Switch" Binding="{Binding SwitchPort}" Width="70" CellStyle="{StaticResource CenterCell}"/>
</DataGrid.Columns>
</DataGrid>
Při kliknutí na záhlaví proběhne změna řazení podle konkrétního sloupce...
Michal Štěpánek:5.10.2020 8:46
Možná už vím... Sloupce, ve kterých mám v DataGridu nastaveno
zobrazení přes "DataTemplate" se neřadí...
Tady řazení nefunguje
<DataGridTemplateColumn Header="Internet" CellStyle="{StaticResource CenterCell}" Width="auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="ChbConnect" IsChecked="{Binding IsConnected}" IsEnabled="False"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
a u těch ostatních jo...
+20 Zkušeností
+2,50 Kč

Ježek Vít :5.10.2020 20:02
Jupí, konečně datagrig ve formátu jak se mi líbí
Teď jen drobnost, existuje možnost, jak automaticky označit první řádek v
datagridu?
Zobrazeno 8 zpráv z 8.