Hi,
I'm trying to write and interface to a stock database.
I'm using visual studio 2013 and WPF (c#). I have created a window containing my text boxes. Relating to the data I wish to input into the database. the XAML is:
<Window x:Class="BondedStock.ManageItem" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Stock Management System" Height="Auto" Width="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" SizeToContent="WidthAndHeight"><Grid Name="gridItemDetails" ShowGridLines="False" Background="#FF2B2B2B" DataContext="{Binding ElementName=lstItems, Path=SelectedItem}"><Grid.RowDefinitions><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="auto" MinWidth="100"></ColumnDefinition><ColumnDefinition Width="Auto" MinWidth="100"></ColumnDefinition><ColumnDefinition Width="Auto" MinWidth="100"></ColumnDefinition><ColumnDefinition Width="Auto" MinWidth="100"></ColumnDefinition></Grid.ColumnDefinitions><TextBlock Margin="7" Grid.Row="3" Foreground="White">Item Management</TextBlock><TextBlock Margin="7" Grid.Row="4" Foreground="White">Part Number:</TextBlock><TextBox Name="TB_PartNumber" Margin="5" Grid.Column="1" Grid.Row="4" Text="{Binding Path=PartNumber}"></TextBox><TextBlock Margin="7" Grid.Row="5" Foreground="White">Description:</TextBlock><TextBox Name="TB_Description" Margin="5" Grid.Column="1" Grid.Row="5" Text="{Binding Path=Description}"></TextBox><TextBlock Margin="7" Grid.Row="6" Foreground="White">NSC:</TextBlock><TextBox Name="TB_NSC" Margin="5" Grid.Column="1" Grid.Row="6" Text="{Binding Path=NSC}"></TextBox><TextBlock Margin="7" Grid.Row="7" Foreground="White">NC:</TextBlock><TextBox Name="TB_NC" Margin="5" Grid.Column="1" Grid.Row="7" Text="{Binding Path=NC}"></TextBox><TextBlock Margin="7" Grid.Row="8" Foreground="White">NIN:</TextBlock><TextBox Name="TB_NIN" Margin="5" Grid.Column="1" Grid.Row="8" Text="{Binding Path=NIN}"></TextBox><TextBlock Margin="7" Grid.Row="9" Foreground="White">DMC:</TextBlock><TextBox Name="TB_DMC" Margin="5" Grid.Column="1" Grid.Row="9" Text="{Binding Path=DMC}"></TextBox><TextBlock Margin="7" Grid.Row="10" Foreground="White">DofQ:</TextBlock><TextBox Name="TB_DofQ" Margin="5" Grid.Column="1" Grid.Row="10" Text="{Binding Path=DofQ}"></TextBox><TextBlock Margin="7" Grid.Row="11" Foreground="White">Stock Value:</TextBlock><TextBox Name="TB_StockValue" Margin="5" Grid.Column="1" Grid.Row="11" Text="{Binding Path=StockValue}"></TextBox><TextBlock Margin="7" Grid.Row="12" Foreground="White">Location:</TextBlock><TextBox Name="TB_Location" Margin="5" Grid.Column="1" Grid.Row="12" Text="{Binding Path=Location}"></TextBox><TextBlock Margin="7" Grid.Row="13" Foreground="White">Image:</TextBlock><TextBox Name="TB_Image" Margin="5" Grid.Column="1" Grid.Row="13" Text="{Binding Path=Image}"></TextBox><TextBlock Margin="7" Grid.Row="14" Foreground="White">Contract:</TextBlock><TextBox Name="TB_Contract" Margin="5" Grid.Column="1" Grid.Row="14" Text="{Binding Path=ContractNumber}"></TextBox><TextBlock Margin="7" Grid.Row="15" Foreground="White">Equipment:</TextBlock><TextBox Name="TB_Equipment" Margin="5" Grid.Column="1" Grid.Row="15" Text="{Binding Path=MainEquipment}"></TextBox><TextBlock Margin="7" Grid.Row="16" Foreground="White">Qty:</TextBlock><TextBox Name="TB_Qty" Margin="5" Grid.Column="1" Grid.Row="16" Text="{Binding Path=Qty}"></TextBox><Button Name="B_AddItem" Width="74" Height="25" Grid.Column="2" Grid.Row="8" Click="B_AddItem_Click">Add Item</Button></Grid></Window>
I have created a data object to handle the data:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BondedStock { public class Item { private string partNumber; public string PartNumber { get { return partNumber; } set { partNumber = value; } } private string desciption; public string Description { get { return desciption; } set { desciption = value; } } private int nsc; public int NSC { get { return nsc; } set { nsc = value; } } private int nc; public int NC { get { return nc; } set { nc = value; } } private int nin; public int NIN { get { return nin; } set { nin = value; } } private string dmc; public string DMC { get { return dmc; } set { dmc = value; } } private string dofq; public string DofQ { get { return dofq; } set { dofq = value; } } private decimal stockValue; public decimal StockValue { get { return stockValue; } set { stockValue = value; } } private string location; public string Location { get { return location; } set { location = value; } } private string image; public string Image { get { return image; } set { image = value; } } private int contractNumber; public int ContractNumber { get { return contractNumber; } set { contractNumber = value; } } private string mainEquipment; public string MainEquipment { get { return mainEquipment; } set { mainEquipment = value; } } private int qty; public int Qty { get { return qty; } set { qty = value; } } public Item(string partNumber, string description, int nsc, int nc, int nin, string dmc, string dofq, decimal stockValue, string location, string image, int contractNumber, string mainEquipment, int qty) { PartNumber = partNumber; Description = desciption; NSC = nsc; NC = nc; NIN = nin; DMC = dmc; DofQ = dofq; StockValue = stockValue; Location = location; Image = image; ContractNumber = contractNumber; MainEquipment = mainEquipment; Qty = qty; } } }
I have a data access class to handle database communications:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.Sql; using System.Data.SqlTypes; using System.Data.SqlClient; namespace BondedStock { public class StockDB { // Get connection string private string connectionString = Properties.Settings.Default.ConnectionString; public void InsertItem(Item item) { SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand("InsertItem", con); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@Part_Number", item.PartNumber); cmd.Parameters.AddWithValue("@Description", item.Description); cmd.Parameters.AddWithValue("@NSC", item.NSC); cmd.Parameters.AddWithValue("@NC", item.NSC); cmd.Parameters.AddWithValue("@NIN", item.NIN); cmd.Parameters.AddWithValue("@DMC", item.DMC); cmd.Parameters.AddWithValue("@DofQ", item.DofQ); cmd.Parameters.AddWithValue("@Stock_Value", item.StockValue); cmd.Parameters.AddWithValue("@Location", item.Location); cmd.Parameters.AddWithValue("@Image", item.Image); cmd.Parameters.AddWithValue("@Contract", item.ContractNumber); cmd.Parameters.AddWithValue("@Equipment", item.MainEquipment); cmd.Parameters.AddWithValue("@Qty", item.Qty); try { con.Open(); cmd.ExecuteNonQuery(); } finally { con.Close(); } } } }
The c# code behind the XAML is:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Windows.Navigation; namespace BondedStock { /// <summary> /// Interaction logic for ManageItem.xaml /// </summary> public partial class ManageItem : Window { public ManageItem() { InitializeComponent(); } //private List<Item> items; private void B_AddItem_Click(object sender, RoutedEventArgs e) { Item item = (Item)gridItemDetails.DataContext; try { App.StockDB.InsertItem(item); } catch { MessageBox.Show("Error contacting the database."); } } } }
The problem I have is the line ' Item item = (Item)gridItemDetails.DataContext;' The line does not populate the data object item. The debugger also indicates that gridItemDetails also does not hold the data.
Can anyone help me out. I appear to be stumped!!! I'm obviously making some stupid mistake here. I have used this design before with no problem!
Thanks,
Steve