Pääsivulle | TIETOTEKNIIKAN PÄÄSIVULLE
Datagrid (WPF)
Tässä on esimerkki DataGridin käytöstä tekstimuotoisen tiedon
esittämisessä. Taulukossa esitettävä tietorivi on oma luokkansa
Grivi, eli taulukossa esitettävä tieto on näiden luokkien taulukko.
Tämä tekee koodaamisesta selkeää.
Tässä rivejä ei voi käyttäjä muokata, eli xaml-tiedostossa on
määrittely IsReadOnly="True".
Valitun rivin
oletusväri on vaihdettu "omaan" väriin (siniseen).
Ensimmäisen sarakkeen tiedot on sisennetty oikeaan reunaan, ks.
xaml-tiedosto.
Koodissa on annettu tietolähde (ItemsSource) ja xaml:ssa
sarakekohtainen "Binding=".
Tässä muutama hyödyllinen koodirivi, jos sovelluksesta tehdään
monipuolisempi:
// Halutun
rivin (ihaluttu) laittaminen datagridissä valituksi:
dgTiedot.SelectedItem = null; // poistetaan aiempi valinta
foreach (Grivi item in dgTiedot.Items) // etsitään
rivi
{
if (item.IDi = ihaluttu)
{
dgTiedot.SelectedItem = item; //
uusi valinta
dgTiedot.ScrollIntoView(item); //
skrollataan se esille
break;
}
}
// Jos on tarve scrollata tietty rivi näkyviin, esimerkki:
dgTiedot.ScrollIntoView(dgTiedot.Items[20]);
JA SITTEN OHJELMAKOODIT
Ensin on ikkunan kuvaus xaml-tiedostona ja sen jälkeen C#-koodi,
joka tulee omaksi tiedostokseen. Sovellus muodostaa tietorivien
sisällöt keinotekoisina for-loopissa. Normaalisoftassa tiedot
luetaan esimerkiksi tietokannasta.
<!--- 5.2.2018
MainWindow.xaml-->
<Window x:Class="Datagrid_testi.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Datagrid_testi"
mc:Ignorable="d"
Title="Datagrid_testi"
Height="320" Width="625"
Closing="Window_Closing">
<StackPanel>
<StackPanel
Orientation="Horizontal" Background="LightCyan">
<Button x:Name="buttonTiedot" FontWeight="Bold" Margin="15,10"
PreviewMouseLeftButtonUp="ButtonTiedot_Click"
Content=" Tietoja valinnasta "/>
<Button x:Name="buttonSulje" FontWeight="Bold"
Margin="300,10,20,10"
PreviewMouseLeftButtonUp="ButtonSulje_Click"
Content=" Sulje "/>
</StackPanel>
<ScrollViewer
VerticalScrollBarVisibility="Auto" BorderThickness="0"
Padding="0">
<DataGrid x:Name="dgTiedot" AutoGenerateColumns="False"
Height="234"
RowBackground="Bisque" AlternatingRowBackground="Khaki"
AlternationCount="2"
CanUserResizeRows="False" SelectionMode="Single"
IsReadOnly="True">
<DataGrid.Resources>
<!--- korvattu valinnan
vaaleanharmaa vaaleansinisellä -->
<SolidColorBrush
x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}"
Color="LightSkyBlue"/>
<SolidColorBrush
x:Key="{x:Static
SystemColors.InactiveSelectionHighlightTextBrushKey}"
Color="White"/>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn
Header="idUkoor" Binding="{Binding IDi}" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter
Property="HorizontalAlignment" Value="Right" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn
Header="Maa" Binding="{Binding Maaz}" />
<DataGridTextColumn
Header="Paikkanimi" Binding="{Binding Nimiz}" />
<DataGridTextColumn
Header="Lati" Binding="{Binding Latiz}" />
<DataGridTextColumn
Header="Longi" Binding="{Binding Longiz}" />
<DataGridTextColumn
Header="Selitys" Binding="{Binding Lisaz}" />
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
</StackPanel>
</Window>
*************************************************************************
// 5.2.2018 MainWindow.xaml.cs
(Datagrid_testi)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Datagrid_testi
{
//
***********************************************************
// Taulukon yksi rivi
public class Grivi
{
public int IDi { get; set; }
= -1; // auto-property with property initializer
public string Nimiz { get;
set; } = ""; // default on null, siksi initializer
public string Latiz { get;
set; } = "";
public string Longiz { get;
set; } = "";
public string Lisaz { get;
set; } = "";
public string Maaz { get;
set; } = "";
}
//
***********************************************************
// Ikkunan luokka
public partial class MainWindow : Window
{
private List<Grivi>
tulostaulu; // datagrid-taulukon sisältö
//-----------------------------------------------------------------
// 5.2.2018 X01
public MainWindow()
{
InitializeComponent();
tulostaulu = new List<Grivi>(); // datagidin rivit
for (int
i=0;i<30;i++) // Taulukkoon 30 riviä sisältöä
{
Grivi gri = new Grivi() //
laitetaan riveille jotain tietoa
{
IDi = i,
Nimiz = (i < 15) ?
$"Mäntsälä_{i}" : $"Kitee_{i - 14}",
Latiz = (i < 15) ?
$"60.63805{i}" : $"62.09887{i - 14}",
Longiz = (i < 15) ?
$"25.3184{i}" : $"30.13611{i - 14}",
Lisaz = $"Lisätietoa_{i} -
täällä on kaunis luonto ja runsaasti patikkapolkuja",
Maaz = "Suomi"
};
tulostaulu.Add(gri); //
lisätään tehty rivi taulukkoon
}
dgTiedot.ItemsSource = tulostaulu; // taulukon tietolähteen
määrittely
}
//-----------------------------------------------------------------
// 18.1.2018 X28
// Rivi on valittu ja
tehdään tietojen kanssa jotain
private void
ButtonTiedot_Click(object sender, MouseButtonEventArgs e)
{
Grivi vak
= (Grivi)dgTiedot.SelectedItem; // valittu rivi
if (vak
== null)
{
MessageBox.Show("Valitse ensin joku rivi",
"(X28-01) Ilmoitus");
return;
}
string
mez = $"Nyt mentäisiin antamaan lisätietoja\nrivistä, jonka
IdUkoor = {vak.IDi}";
MessageBox.Show(mez, "(X28-01) Ilmoitus");
}
//-----------------------------------------------------------------
// 31.1.2018 X04
// Käyttäjä painoi Sulje
-painiketta
private void
ButtonSulje_Click(object sender, MouseButtonEventArgs e)
{
this.Close();
}
//
---------------------------------------------------------------
// 20.11.2017
X20
// Tänne tullaan, jos tuli
komento this.Close()
// tänne tullaan myös jos
käyttäjä klikkaa ikkunan sulkemisruksia
private void
Window_Closing(object sender,
System.ComponentModel.CancelEventArgs e)
{
// tähän
voi sijoittaa lopetustoimintoja, esim. jonkun resurssin vapautus
// tai
lopetuksen peruutus eli e.Cancel = true;
}
}
}
--------------------------------
(sivua muokattu 5.2.2018)