【问题标题】:How can I get value from db and set cell of datagrid wpf如何从 db 获取值并设置 datagrid wpf 的单元格
【发布时间】:2021-06-08 13:17:54
【问题描述】:

当用户输入 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 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。这些是我想要的数据网格单元格。

谢谢。

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    实现 INotifyPropertyChanged 并在您的 Invoice 类中发出更改通知:

    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 = ...;
    }
    

    【讨论】:

    • 非常感谢您!
    【解决方案2】:

    您还可以为每张发票添加一个复选框。并将发票绑定到复选框:

          private bool isInvoiceSelected = false;
    
        public bool IsInvoiceSelected
        {
            get
            {
                return isInvoiceSelected;
            }
    
            set
            {
                SetProperty(ref this.isInvoiceSelected, value);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多