你能帮帮我吗?我有这个代码将显示输出,每次用户输入代码时,它将列出详细信息。我想这样做从后面的代码中添加新行到数据网格(它的要求)。但显然,当我添加新数据时,它还会再次添加具有相同数据的新列(显然是因为我的代码),但我不知道如何在不添加相同列的情况下执行此操作。
这是背后的代码
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());
}
}
当用户在项目框中插入项目代码并按下keydown时,它将在stackpanel中发送项目代码的详细信息。
你能否通过以下方法之一告诉我你是否正在做预期的结果?
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列,列将保持可见。 (如果你已经明白了,我很抱歉。)