如何使用代码隐藏数据网格中的每次数据插入时添加新行?

问题描述 投票:0回答:1

你能帮帮我吗?我有这个代码将显示输出,每次用户输入代码时,它将列出详细信息。我想这样做从后面的代码中添加新行到数据网格(它的要求)。但显然,当我添加新数据时,它还会再次添加具有相同数据的新列(显然是因为我的代码),但我不知道如何在不添加相同列的情况下执行此操作。

这是背后的代码

var col = new DataGridTextColumn();
                    col.Width = 200;
                    col.Header = "Barcode";
                    col.IsReadOnly = true;
                    col.Binding = new Binding("ItemCode");
                    dgItemDisplay.Columns.Add(col);

                    var col2 = new DataGridTextColumn();
                    col2.Width = 400;
                    col2.IsReadOnly = true;
                    col2.Header = "Item Name";
                    col2.Binding = new Binding("ItemName");
                    dgItemDisplay.Columns.Add(col2);

                    var col3 = new DataGridTextColumn();
                    col3.Width = 200;
                    col3.IsReadOnly = true;
                    col3.Header = "Item Price";
                    col3.Binding = new Binding("ItemPrice");
                    dgItemDisplay.Columns.Add(col3);

如果我没有把这段代码(dgItemDisplay.Columns.Add(col3);)数据没有出现在数据网格中。

这是我在.xaml中的数据网格

<DataGrid MouseLeftButtonUp="DgItemDisplay_MouseLeftButtonUp" HorizontalAlignment="Center"  Width="1096" Name="dgItemDisplay" AutoGenerateColumns="False" Height="auto" SelectionMode="Single" CanUserAddRows="false" SelectionUnit="FullRow" />

this is what its look like

如果解释相当混乱,我很抱歉。我不知道如何解释它:(

我的用户代码插入ItemCode。

private void txtItemCode_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
            string itemCode = txtItemCode.Text;


            if (e.Key == Key.Return)
            {
                SimpleItem item = cashierViewModel.validateItemOnHandCode(txtItemCode.Text, 1);

                if (item != null)
                {

                    cashierViewModel.AddItemToList(item, PosWindows2.cashier.ShopId);
                    LoadData();
                    dgItemDisplay.ItemsSource = null;
                    dgItemDisplay.ItemsSource = CashierViewModel.itemDisplayList;

 DataGridTextColumn col = new DataGridTextColumn();
                        col.Width = 200;
                        col.Header = "Barcode";
                        col.IsReadOnly = true;
                        col.Binding = new Binding("ItemCode");
                        dgItemDisplay.Columns.Add(col);

                        DataGridTextColumn col2 = new DataGridTextColumn();
                        col2.Width = 400;
                        col2.IsReadOnly = true;
                        col2.Header = "Item Name";
                        col2.Binding = new Binding("ItemName");
                        dgItemDisplay.Columns.Add(col2);

                        DataGridTextColumn col3 = new DataGridTextColumn();
                        col3.Width = 200;
                        col3.IsReadOnly = true;
                        col3.Header = "Item Price";
                        col3.Binding = new Binding("ItemPrice");
                        dgItemDisplay.Columns.Add(col3);

                        spItemDisplay.Children.Add(dgItemDisplay);
                }
                else
                {
                    MessageBox.Show("Item Not Available.", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
                }
                txtItemCode.Text = null;
            }
        }
            catch (Exception ex)
            { 
                CustomExceptionHandling customExceptionHandling = new CustomExceptionHandling();
                customExceptionHandling.CustomExHandling(ex.ToString());
            }
        }

当用户在项目框中插入项目代码并按下keydown时,它将在stackpanel中发送项目代码的详细信息。

c# wpf wpfdatagrid
1个回答
0
投票

你能否通过以下方法之一告诉我你是否正在做预期的结果?

A.在构造函数(或OnApplyTemplate)中编写以下代码,并注释掉“txtItemCode_KeyDown”中的相应部分。

var col = new DataGridTextColumn ();
...
dgItemDisplay.Columns.Add (col3);

B.写一个字段变量,如bool isColumnAdded = false;在类中。并在“txtItemCode_KeyDown”内更改如下。

if (!isColumnAdded)
{
    isColumnAdded = true;
    var col = new DataGridTextColumn ();
    ...
    dgItemDisplay.Columns.Add (col3);
}

DataGrid.Columns.Add方法是一种在UI上增加DataGrid列的方法。一旦显示ItemCode,ItemName,ItemPrice列,列将保持可见。 (如果你已经明白了,我很抱歉。)

© www.soinside.com 2019 - 2024. All rights reserved.