39
votes

I need to programmatically create a DataGrid and need to add a double click row event to it. How is this done in C#? I found this;

myRow.MouseDoubleClick += new RoutedEventHandler(Row_DoubleClick);

Although this does not work for me since I am binding the DataGrid.ItemsSource to a collection and not manually adding in the rows.

1
Wouldn't it be easiest to subscribe to myGrid.MouseDoubleClick and then in the event handler check if the click happened on a row (or which row is selected)?floele
Unless by "programmatically create a DataGrid" (which, btw, taken literally, means there would be no DataGrid Element in the XAML File), you just mean "binding the DataGrid.ItemsSource to a collection and not manually adding in the rows", which I suspect is what you meant esp. based on you marking Rohit Vats's A on "Apr 1 '14 at 16:37" as the Accepted A, this Q is a dupe of "stackoverflow.com/questions/3120616/…".Tom
Does this answer your question? WPF datagrid selected row clicked event ?Tom

1 Answers

88
votes

You can do that in XAML by adding default style for DataGridRow under its resources section and declare event setter over there:

<DataGrid>
    <DataGrid.Resources>
        <Style TargetType="DataGridRow">
            <EventSetter Event="MouseDoubleClick" Handler="Row_DoubleClick"/>
        </Style>
    </DataGrid.Resources>
</DataGrid>

OR

In case want to do it in code behind. Set x:Name on grid, create style programatically and set the style as RowStyle.

<DataGrid x:Name="dataGrid"/>

and in code behind:

Style rowStyle = new Style(typeof(DataGridRow));
rowStyle.Setters.Add(new EventSetter(DataGridRow.MouseDoubleClickEvent,
                         new MouseButtonEventHandler(Row_DoubleClick)));
dataGrid.RowStyle = rowStyle;

AND

There is example of event handler:

  private void Row_DoubleClick(object sender, MouseButtonEventArgs e)
  {
     DataGridRow row = sender as DataGridRow;
     // Some operations with this row
  }