Click here to Skip to main content
15,886,519 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am creating an application in which I created a list collection and successfully binded bound it to a DataGrid. The problem I am having is to pull data back from the datagrid and use it to form the elements of the same list collection when a user clicks the SAVE button after making changes to the DataGrid.

Thanks in advance.

THS IS THE XAML This is the Xaml:

HTML
<grid removed="CornflowerBlue">
    <datagrid autogeneratecolumns="False" height="530" horizontalalignment="Left" margin="12,12,0,0" name="gridBeveragesAndJuices" verticalalignment="Top" width="573">
              HorizontalGridLinesBrush="Cyan" RowBackground="#FF12AD12" VerticalGridLinesBrush="Cyan" Foreground="Cyan" EnableColumnVirtualization="False" 
              EnableRowVirtualization="False" CanUserDeleteRows="True" CanUserAddRows="True" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" CanUserSortColumns="False" AlternatingRowremoved="DodgerBlue" FontSize="13">
        <datagrid.resources>
            <Style TargetType="{x:Type DataGridColumnHeader}">
                <setter property="Foreground" value="DodgerBlue" />
                <setter property="BorderBrush" value="Yellow" />
            </Style>
        </datagrid.resources>
        <datagrid.columns>
            <datagridtextcolumn width="287" header="                        ITEMS">
                       Binding="{Binding Path=ITEMS8, Mode=TwoWay, NotifyOnTargetUpdated=True}" x:Name="ItemsColumn" />
            <datagridtextcolumn width="286" header="                        PRICE">
                       Binding="{Binding Path=PRICE8, Mode=TwoWay, NotifyOnTargetUpdated=True}" x:Name="PriceColumn"/>
        </datagridtextcolumn></datagridtextcolumn></datagrid.columns>
    </datagrid>
    <Button Content="Cancel" Height="23" HorizontalAlignment="Left" Margin="67,578,0,0" Name="btnCancel" VerticalAlignment="Top" Width="75" />
    <Button Content="Save" Height="23" HorizontalAlignment="Left" Margin="256,578,0,0" Name="btnSave" VerticalAlignment="Top" Width="75" Click="btnSave_Click" />
    <Button Content="Exit" Height="23" HorizontalAlignment="Left" Margin="444,578,0,0" Name="btnExit" VerticalAlignment="Top" Width="75" />


</grid>


This is the code behind:
C#
public partial class BeveragesAndJuices : Window
{
    public BeveragesAndJuices()
    {
        InitializeComponent();
        gridBeveragesAndJuices.ItemsSource = Source8;
    }

    public class Values8 
    {
        public string ITEMS8 { get; set; }
        public decimal PRICE8 { get; set; }
    }


    public List<values8> Source8 = new List<values8> 
    {
        new Values8(){ITEMS8 = "Lacasera ", PRICE8 = 290}, new Values8(){ITEMS8 = "Cran-Orange Chiller ", PRICE8 = 290}, new Values8(){ITEMS8 = "Festive Fruity Flavored Milk  ", PRICE8 = 290}, 
        new Values8(){ITEMS8 = "Homemade Iced Coffee ", PRICE8 = 290}, new Values8(){ITEMS8 ="Lemon Cucumber Seltzer " , PRICE8 = 290}, new Values8(){ITEMS8 = "Fizzy Water ", PRICE8 = 290}, 
        new Values8(){ITEMS8 ="Haunted (Black Cauldron) Punch  " , PRICE8 = 290}, new Values8(){ITEMS8 ="Lemon Ginger Iced Green Tea " , PRICE8 = 290}, new Values8(){ITEMS8 ="Orange Creamsicle Shake " , PRICE8 = 290}, 
        new Values8(){ITEMS8 = "Blueberry Blast Smoothie ", PRICE8 = 290}, new Values8(){ITEMS8 ="Shamrock Milk Mixer " , PRICE8 = 290}, new Values8(){ITEMS8 = "Pomegranate Punch  ", PRICE8 = 290}, 
        new Values8(){ITEMS8 ="anned Milo " , PRICE8 = 290}, new Values8(){ITEMS8 ="Viju Milk " , PRICE8 = 290}, new Values8(){ITEMS8 = "5 Alive ", PRICE8 = 290}, 
        new Values8(){ITEMS8 ="Cherry Vanilla Smoothie  " , PRICE8 = 290}, new Values8(){ITEMS8 = "Boysenberry-Banana Blast ", PRICE8 = 290}, new Values8(){ITEMS8 = "Vanilla Iced Mochaccino  ", PRICE8 = 290}, 
        new Values8(){ITEMS8 ="Choco-Nana Milk Mixer " , PRICE8 = 290}, new Values8(){ITEMS8 = "Fresh Fruit Pudding Milk Mixer ", PRICE8 = 290}, new Values8(){ITEMS8 ="Luscious Licuado  " , PRICE8 = 290}, 
        new Values8(){ITEMS8 = "Frosty Pine-Orange Yogurt Smoothie ", PRICE8 = 290}, new Values8(){ITEMS8 = "Mocha-ccino Freeze ", PRICE8 = 290}, new Values8(){ITEMS8 ="Lite Iced Mocha " , PRICE8 = 290}, 
        new Values8(){ITEMS8 ="Nectarine Whirl " , PRICE8 = 290}, new Values8(){ITEMS8 ="Strawberries and Cream Smoothie  " , PRICE8 = 290}, new Values8(){ITEMS8 ="Strawberry Light Lemonade " , PRICE8 = 290}
    };

    private void btnSave_Click(object sender, RoutedEventArgs e)
    {
        //clear the elements of the source  
        Source8.Clear();

        //get the items on the datagrid and use them to form new elements of the 
        //Source8

        foreach(DataGridRow Row in gridBeveragesAndJuices)
        {
            //this where am stuck, foreach flags an error
            //that DataGridRow does not have a definition for GetEnumerator
        }
    }
}
Posted
Updated 7-Apr-12 7:07am
v2
Comments
Shahin Khorshidnia 7-Apr-12 13:08pm    
And the problem?!

1 solution

You really should be using binding for the dataGrid. If you have the following class as the DataContext

public class DataContext : INotifyPropertyChanged
{
  Public List<values8> Source8 {
    get { return _source8;}
    set {
      if (value != _source8)
      {
        _source8 = value;
        if (PropertyChange != null)
          PropertyChanged (this, new PropertyChangedEventArgs(_source8));
      }
    }
  }
  private List<values8> _source8; 
  // Whatever else
}</values8></values8>


The XAML would be:

<datagrid itemssource="{Binding Source8}">
  ......
</datagrid>


Now to get the values in the Grid, you just need to interate through the Source8 list.

You need to learn about the MVVM pattern, which is really what WPF is intended to work with.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900