每次使用后面的代码将数据插入到datagrid中时,如何添加新行?

时间:2019-03-07 03:03:56

标签: c# wpf wpfdatagrid

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

这是背后的代码

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());
            }
        }

当用户在文本框中插入商品代码并按下键时,它将在堆叠面板中发送商品代码的详细信息。

1 个答案:

答案 0 :(得分: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列,这些列将保持可见。 (对不起,如果您已经了解了。)