您能帮我吗?我有这段代码,它将显示输出,每次用户输入代码时,它将列出详细信息。我想要这样做,将新行从后面的代码添加到数据网格中(这是要求)。但是显然,当我添加新数据时,它还会再次添加具有相同数据的新列(显然是因为我的代码),但是我不知道如何在不添加同一列的情况下进行操作。
这是背后的代码
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" />
对不起,如果解释很乱。我不知道该怎么解释:(
我为用户提供的代码插入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());
}
}
当用户在文本框中插入商品代码并按下键时,它将在堆叠面板中发送商品代码的详细信息。
答案 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列,这些列将保持可见。 (对不起,如果您已经了解了。)