WPF - editace DataGridu   zodpovězená otázka

WPF

<DataGrid x:Name="u_table" ItemsSource="{Bin­ding}" AutoGenerateCo­lumns="False" ...>
 <DataGrid.Columns>
  <DataGridTempla­teColumn Header="Položka" SortMemberPat­h="nazev">
   <DataGridTempla­teColumn.CellTem­plate>
    <DataTemplate>
     <StackPanel Orientation="Ho­rizontal">
      <Image Height="18" Source="{Binding image}" />
      <TextBlock Margin="5, 0, 0, 0" Text="{Binding nazev}" />
     </StackPanel>
    </DataTemplate>
   </DataGridTem­plateColumn.Ce­llTemplate>
  </DataGridTem­plateColumn>
  <DataGridTextColumn Header="Množství" Binding="{Binding mnozstvi}" />
 ...

Při kliku na položku "množství" ji mohu editovat. Jak udělat abych mohl editovat i "nazev"?

Jsem s WPF začátečník a budu vděčný za jakoukoli pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud správně vidím, tak ten název máte v TextBlocku, což je jenom popisek, který editovat nejde. Kdybyste to dal třeba do TextBoxu a binding mode dal TwoWay (aby se Vám změny promítly i do dat), tak to půjde.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak to jde i jinak (lépe). Klasické vykreslení necháte v TextBlocku, ale do CellEditTemplate ho změníte na TextBox, který už lze klasicky editovat, navíc se změny projeví v bindovaných datech (pokud je to žádoucí).

<DataGrid x:Name="u_table" ItemsSource="{Bin­ding}" AutoGenerateCo­lumns="False" ...>

<DataGrid.Columns>

<DataGridTempla­teColumn Header="Položka" SortMemberPat­h="nazev">

<DataGridTempla­teColumn.CellTem­plate>

<DataTemplate>

<StackPanel Orientation="Ho­rizontal">

<Image Height="18" Source="{Binding image}" />

<TextBlock Margin="5, 0, 0, 0" Text="{Binding nazev}" />

</StackPanel>

</DataTemplate>

</DataGridTem­plateColumn.Ce­llTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding nazev, Mode=TwoWay}"></TextBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTem­plateColumn>

<DataGridTextColumn Header="Množství" Binding="{Binding mnozstvi}" />
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky,

ještě mě napadá otázka, zda jde při začátku editace nastavit ostatní buňky v řádku do editačního modu.

Ještě jednou děkuji za pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No, jedno řešení by bylo přidat CellEditingTemplate ke každé column. Myslím, že to ale není přesně to, co byste chtěl, protože i tak je nutné na každé column pro editaci dvojklik.

Na to, aby se to změnilo hromadně pro všechny columns by byl nejspíš nutný nějaký code-behind algoritmus, který by to nastavil ručně, nebo to jde i jinak, ale nevím jak :-).

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback