Как добавить новую строку каждый раз при вставке данных в сетку данных, используя код позади? - PullRequest
0 голосов
/ 07 марта 2019

Можете ли вы помочь мне с этим. У меня есть этот код, который будет отображать вывод, что каждый раз, когда пользователь вводит код, он перечисляет детали. Я хочу сделать это добавить новую строку в сетку данных из кода (это требование). но, очевидно, когда я добавляю новые данные, он также добавляет новый столбец с теми же данными снова (да, очевидно, из-за моего кода), но я не знал, как это сделать, не добавив тот же столбец.

это код

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

Извините, если объяснение довольно грязное. Я не знаю, как это объяснить: (

мой код для вставки кода пользователя.

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 голосов
/ 07 марта 2019

Не могли бы вы сказать мне, если вы делаете желаемый результат, выполнив один из методов, описанных ниже?

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 - это метод увеличения столбца DataGrid в пользовательском интерфейсе. После отображения столбцов ItemCode, ItemName, ItemPrice эти столбцы останутся видимыми. (Извините, если вы это уже поняли.)

...