When user enter the barcode of datagrid's first column database fetches required data (PRODUCT_NAME and PURCHASE_PRICE). I want to put it in the related cell data i have.
I can get the data what i want but i dont know how to set of selected item's PRODUCT_NAME and PURCHASE_PRICE cell.
XAML
<DataGrid x:Name="UrunGrid" Grid.Row="0" CanUserAddRows="True" AutoGenerateColumns="False" AlternatingRowBackground="#FF788697" AlternationCount = "2" HorizontalScrollBarVisibility="Hidden" CellEditEnding="UrunGrid_CellEditEnding" SelectionUnit="FullRow" CurrentCellChanged="UrunGrid_CurrentCellChanged" RowEditEnding="UrunGrid_RowEditEnding" SelectedCellsChanged="UrunGrid_SelectedCellsChanged" SelectionChanged="UrunGrid_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Header="Barkod" Binding="{Binding BARKOD}" Width="2*" />
<DataGridTextColumn Header="Ürün Açıklaması" Binding="{Binding PRODUCT_NAME}" Width="4*"/>
<DataGridTextColumn Header="Adet" Binding="{Binding QUANTITY}" Width="*"/>
<DataGridTextColumn Header="ISK" Binding="{Binding DISCOUNT}" Width="*"/>
<DataGridTextColumn Header="KDV" Binding="{Binding TAX}" Width="*"/>
<DataGridTextColumn Header="Birim Fiyat" Binding="{Binding PURCHASE_PRICE}" Width="*"/>
<DataGridTextColumn Header="Tutar" Binding="{Binding AMOUNT}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
XAML.CS
private void UrunGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
// Eğer seçili kolon barkod ise
if ((string)e.Column.Header == "Barkod")
{
// Girilen değeri barkod değişkenine atıyor.
TextBox t = e.EditingElement as TextBox;
string girilenbarkod = t.Text.ToString();
// Veritabanında kayıtlı mı kontrolü. Değer 0 ise kayıt yok.
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["calcuconnection"].ToString());
String insertquery = "SELECT count(BARCODE) FROM PRODUCT WHERE BARCODE=@BARKOD";
SqlCommand command = new SqlCommand(insertquery, connection);
connection.Open();
command.Parameters.AddWithValue("@BARKOD", girilenbarkod);
int deger = (int)command.ExecuteScalar();
connection.Close();
if (deger == 0)
{
}
else
{
string cekilenurunadi;
string cekilenalisfiyati;
int col = UrunGrid.CurrentCell.Column.DisplayIndex;
int rows = UrunGrid.SelectedIndex;
String insertquery2 = "SELECT PRODUCT_NAME, PURCHASE_PRICE FROM PRODUCT WHERE BARCODE=@BARKOD";
SqlCommand command2 = new SqlCommand(insertquery2, connection);
connection.Open();
command2.Parameters.AddWithValue("@BARKOD", girilenbarkod);
dataReader = command2.ExecuteReader();
while (dataReader.Read())
{
cekilenurunadi = dataReader["PRODUCT_NAME"].ToString();
cekilenalisfiyati = dataReader["PURCHASE_PRICE"].ToString();
MessageBox.Show(cekilenurunadi+cekilenalisfiyati);
}
connection.Close();
}
}
}
CLASS
class Invoice
{
public string BARKOD { get; set; }
public string PRODUCT_NAME { get; set; }
public int QUANTITY{ get; set; }
public int DISCOUNT{ get; set; }
public int TAX{ get; set; }
public int PURCHASE_PRICE { get; set; }
public int AMOUNT { get; set; }
public static ObservableCollection<Invoice> getInvoice()
{
var invoice = new ObservableCollection<Invoice>();
return invoice;
}
}
cekilenurunadi and cekilenalisfiyati. These are what set i want of datagrid cell.
Thanks.
Implement INotifyPropertyChanged
and raise change notifications in your Invoice
class:
class Invoice : INotifyPropertyChanged
{
public string BARKOD { get; set; }
private string _productName;
public string PRODUCT_NAME
{
get { return _productName; }
set { _productName = value; NotifyPropertyChanged(); }
}
public int QUANTITY { get; set; }
public int DISCOUNT { get; set; }
public int TAX { get; set; }
private int _purchasePrice;
public int PURCHASE_PRICE
{
get { return _purchasePrice; }
set { _purchasePrice = value; NotifyPropertyChanged(); }
}
public int AMOUNT { get; set; }
public static ObservableCollection<Invoice> getInvoice()
{
var invoice = new ObservableCollection<Invoice>();
return invoice;
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
...and set the properties:
Invoice invoice = e.Row.Item as Invoice;
if (invoice != null)
{
invoice.PRODUCT_NAME = "...";
invoice.PURCHASE_PRICE = ...;
}