Button in Silverlight Datagrid

Ein Silverlight Datagrid kann im Column Template auch andere Controls enthalten, wie z.B. einen Button. Wie kann man aber erkennen welcher Button geclickt wurde. Dieser Artikel zeigt zwei Möglichkeiten.

Die Daten kommen aus ado.net data Service und  einem entity datamodel. Wie das funktioniert ist nicht Bestandteil dieses Blog Posts. Als Datenbank dient Northwind und als Tabelle Customer. Bei Click auf den Button kommt eine Messagebox hoch und zeigt Infos über die Row an.

image

Zunächst der XAML Code indem der Button definiert wird.

<Grid x:Name="LayoutRoot" Background="White">
<data:DataGrid x:Name="DataGrid1" >
            <data:DataGrid.Columns>
                <data:DataGridTemplateColumn Width="100">
                    <data:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="{Binding CustomerID}" Click="Button_Click" Tag="{Binding CustomerID}"></Button>
                        </DataTemplate>
                    </data:DataGridTemplateColumn.CellTemplate>
                </data:DataGridTemplateColumn>
            </data:DataGrid.Columns>
</data:DataGrid>

Mit Hilfe des Tag Attributes werden ID Daten an den Button gebunden

Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        MessageBox.Show(CType(e.OriginalSource, Button).Tag)
End Sub

Wem das zu einfach ist kann auch die Reihe auslesen indem man den Datacontext des Buttons mit der Liste vergleicht. Der folgende Code gibt dann die Reihe als Nummer aus die geclickt wurde

Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        Dim datenliste As List(Of ServiceReference1.Customers)
        datenliste = DataGrid1.ItemsSource 'automatischer cast
        Dim datenButton As Object = CType(e.OriginalSource, Button).DataContext()
        MessageBox.Show(datenliste.IndexOf(datenButton))
End Sub
Kommentare sind geschlossen