如何从 db 获取值并设置 datagrid wpf 的单元格
How can I get value from db and set cell of datagrid wpf
当用户输入datagrid第一列数据库的条形码时获取所需的数据(PRODUCT_NAME和PURCHASE_PRICE)。我想把它放在我有的相关单元格数据中。
我可以得到我想要的数据,但我不知道如何设置所选项目的 PRODUCT_NAME 和 PURCHASE_PRICE 单元格。
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 和 cekilenalisfiyati。这些是我想要的数据网格单元格设置。
谢谢。
实施 INotifyPropertyChanged
并在您的 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));
}
...并设置属性:
Invoice invoice = e.Row.Item as Invoice;
if (invoice != null)
{
invoice.PRODUCT_NAME = "...";
invoice.PURCHASE_PRICE = ...;
}
您还可以为每张发票添加一个复选框。并将发票绑定到复选框:
private bool isInvoiceSelected = false;
public bool IsInvoiceSelected
{
get
{
return isInvoiceSelected;
}
set
{
SetProperty(ref this.isInvoiceSelected, value);
}
}
当用户输入datagrid第一列数据库的条形码时获取所需的数据(PRODUCT_NAME和PURCHASE_PRICE)。我想把它放在我有的相关单元格数据中。
我可以得到我想要的数据,但我不知道如何设置所选项目的 PRODUCT_NAME 和 PURCHASE_PRICE 单元格。
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 和 cekilenalisfiyati。这些是我想要的数据网格单元格设置。
谢谢。
实施 INotifyPropertyChanged
并在您的 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));
}
...并设置属性:
Invoice invoice = e.Row.Item as Invoice;
if (invoice != null)
{
invoice.PRODUCT_NAME = "...";
invoice.PURCHASE_PRICE = ...;
}
您还可以为每张发票添加一个复选框。并将发票绑定到复选框:
private bool isInvoiceSelected = false;
public bool IsInvoiceSelected
{
get
{
return isInvoiceSelected;
}
set
{
SetProperty(ref this.isInvoiceSelected, value);
}
}