【问题标题】:Something error happens when I try to add an items to Data grid or clear the Data grid当我尝试将项目添加到数据网格或清除数据网格时发生错误
【发布时间】:2019-10-08 19:34:26
【问题描述】:

我有一个数据网格,起初它是空的。然后我需要在用户选择一些数据时添加项目。但在这里它显示像

这样的错误

错误:

System.InvalidOperationException:使用 ItemsSource 时操作无效。改为使用 ItemsControl.ItemsSource 访问和修改元素。

我真的不明白这里有什么问题。

我试过datagridName.Items.clear();datagridName.Items.Add();。但两者都没有工作。

private void TextboxBarCodeTextchanged(object sender,RoutedEventArgs e)
{
  DataGridSalesDetails.Items.Clear();
    for (int i = 0; i < AllStockList.Count; i++)
    {
      if (!string.IsNullOrEmpty((sender as TextBox).Text))
      {
        if (AllStockList[i].BarCode.StartsWith((sender as TextBox).Text, 
        StringComparison.InvariantCultureIgnoreCase))
        {
          Stock vend = AllStockList[i] as Stock;
          DataGridSalesDetails.Items.Add(vend);
          DataGridSalesDetails.Visibility = Visibility.Visible;
          DataGridSalesDetails.Items.Refresh();
          TotalReturnAmount = AllStockList.Sum(a => a.TotalAmount);
          HiddenTotalAount.Text = TotalReturnAmount.ToString();
          LabelFinalAmountValue.Content = TotalReturnAmount.ToString();
        }
      }
    }
}

预期结果是具有附加值的数据网格。我得到的是一个错误。有没有人可以帮助我?我的项目卡住了。

【问题讨论】:

标签: c# .net datagrid code-behind


【解决方案1】:

使用数据网格时,您应该将一组项目分配给该数据网格的 itemSource。您不是将集合分配给 itemSource,而是尝试将新项目添加到该数据网格。

您需要过滤您感兴趣的 Stock 对象并将它们添加到集合中。 当迭代完成并将 Stock 对象添加到集合中时,您需要将集合分配给 ItemSource。

来自 OP 的更新

datagrid 的 itemssource 绑定到一个 Observable 集合。 并且 OP 想要保存旧的 Stock Object Items 列表。

ObservableCollection<Stock> StockItems = new ObserveableCollection<Stock>();

private void TextboxBarCodeTextchanged(object sender,RoutedEventArgs e)
{

oldCollection = ObservableCollection;

for (int i = 0; i < AllStockList.Count; i++)
   {
      if (!string.IsNullOrEmpty((sender as TextBox).Text))
      {
          if (AllStockList[i].BarCode.StartsWith((sender as TextBox).Text, 
          StringComparison.InvariantCultureIgnoreCase))
          {
             var stock = AllStockList[i] as Stock;

             StockItems.Add(stock);
           }
         }
      }
             DataGridSalesDetails.Visibility = Visibility.Visible;
             TotalReturnAmount = filteredCollection.Sum(a => a.TotalAmount);
             HiddenTotalAount.Text = TotalReturnAmount.ToString();
             LabelFinalAmountValue.Content = TotalReturnAmount.ToString();
}

【讨论】:

  • 我已经有一个observable collection,这是我的ItemssourceDataGridSalesDetails.ItemsSource = filteredCollection; 如果我喜欢我如何从旧的Itemssource 获取值?
  • 您应该尝试将项目添加到可观察对象,如果检测到任何新值,数据网格将执行包含添加项目的 UI 更新。
  • 好的。让我试试这个
  • 我将此添加到可观察集合中。但是 observable collection 和 stock 是不同的类型。所以我把stock改成了同类型的可观察集合。现在出现另一个错误,无法通过引用转换、装箱转换、拆箱转换、包装转换或空类型转换将类型“BILLMATES.DbModels.Stock”转换为“BILLMATES.DbModels.SalesReturnInvoiceData”
  • 但首先,我需要做DataGridSalesDetails.Items.Clear();,这会带来同样的错误
猜你喜欢
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
相关资源
最近更新 更多