Search code examples
c#wpfwpfdatagrid

Get Wpf DataGrid data in a list


i have a datagrid and i am populating it with data from a list. now i want to get back all the data in my datagrid to a list. how can i ?

<DataGrid Name="InstrumentGrid"
                      VerticalAlignment="Top" HorizontalAlignment="left" 
                      Margin="0,16,0,0" Grid.ColumnSpan="3" Grid.Row="19" Grid.RowSpan="2" 
                      AutoGenerateColumns="False"
                      Width="422" Grid.Column="1">
    <DataGrid.Columns>
        <DataGridTextColumn Header="ID" Binding="{Binding Id}" />
        <DataGridTemplateColumn Header="NCS Date" >
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <DatePicker BorderThickness="0" Height="20" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn Header="Instrument No" Binding="{Binding NcsNo}" />
        <DataGridTextColumn Header="Type" Binding="{Binding Type}" />
        <DataGridTextColumn Header="Bank Name" Width="*" Binding="{Binding BankName}" />
        <DataGridTemplateColumn Header="Action">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <VirtualizingStackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                        <Image Width="10" Margin="5 0 0 0" Height="10" Stretch="Fill" Source="/InstrumentManagement;component/wrongSign.png"></Image>
                    </VirtualizingStackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>  

Loading data into DataGrid

private List<Data> list = new List<Data>();
public VehicleInOutWnd()
{
    InitializeComponent();



    for (int i = 0; i < 2; i++)
    {
        list.Add(new Data()
        {
            Id = i.ToString(),
            BankName = "Bank al habib"+i,
            NcsDate = "23/12/2018",
            InstrumentNo = "234"+i,
            Type = "Type abc"+i
        });
    }

    InstrumentGrid.ItemsSource = list;

}  

Now i just want to get all this data in DataGrid, as it was in list<Data> in some other list. on a button click function.


Solution

  • When you edit a cell in the DataGrid, you are setting the corresponding property of the Data class in list. So all edited data is already in list. Just get it from there before you clear the original list:

    var modifiedData = list.ToList(); //creates a copy of the list that contains the modified data
    list.Clear(); //clears the original list.