【问题标题】:Can i delete the elements of my datagrid without changing the datasource?我可以在不更改数据源的情况下删除数据网格的元素吗?
【发布时间】:2014-01-30 11:24:57
【问题描述】:

我想在不更改数据源的情况下删除数据网格的元素。

当我选择将我的数据网格绑定到我的数据库测试时,它可以工作。 我的数据网格显示了我的 2 列:带有特定行的“ID”和“Name”。 我可以将行添加到我的数据网格并将其保存到我的数据库中。

但现在我想显示不带任何元素的列名,这样用户就可以在不查看数据库元素的情况下添加行。

我该怎么做?

【问题讨论】:

标签: c# wpf datagrid datasource


【解决方案1】:

我建议,创建一个自定义类的 ObservableCollection,您将在其中拥有 IsVisible 属性。默认值为 false,如果 IsVisible = false,您可以在 xaml 中添加逻辑,然后从网格中隐藏该行。

public ObservableCollection<GridInfo> Data { get; set; }

public class GridInfo
{
    public bool IsVisible { get; set; } 
    // other properties will come like this
}

在 XAML 中,您可以将转换器与网格行的 Visibility 属性一起使用,如下所示。

Visibility="{Binding IsVisible, Converter={StaticResource VisibilityConverter}}"

您将拥有如下转换器:

public class VisibilityConverter : IValueConverter
{
    public object Convert(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        bool visibility = !(bool)value;
        return visibility ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        Visibility visibility = (Visibility)value;
        return (visibility == Visibility.Visible);
    }
}

【讨论】:

  • 我认为您误解了这个问题。问题作者说但现在我想显示没有任何元素的列的名称,因此用户可以在不看到我的数据库元素的情况下添加行......隐藏行没有任何意义。
  • 没有看到元素意味着用户想要从外部世界隐藏数据并且不想删除实际数据(根据用户,他想从网格中删除数据而不是来自数据源)。
  • 如果您再次阅读他们的问题(我接受的是 not 清楚),我想您会发现他们只想显示一个空行:因此用户可以在不查看我的数据库元素的情况下添加行。不管怎样,我们很快就会发现。
  • 为什么 MxR 的答案被否决了?根据要求,这是一个很好的解决方案。如果您不隐藏行,那么每当用户输入其第一条记录时,它将显示在网格中。所以需要隐藏行。
  • 我投了反对票,因为我认为他对问题的理解是错误的......如果问题作者再次返回并不同意,那么我会很乐意将其删除。
【解决方案2】:

将 DataGrid 的 DataSource 绑定到该类型的属性

ObservableCollection<T>

这样,只要集合发生变化,数据源就会得到通知。

【讨论】:

    【解决方案3】:

    假设您的Binding 属性是正确的DataGrid.ItemsSource,添加一个新的空行所需要做的就是向您的数据绑定集合添加一个新项目:

    <DataGrid ItemsSource="{Binding Items}" ... />
    
    ...
    
    Items.Add(new YourItemtype());
    

    如果您正确地使用BindingDataGrid.ItemsSource 属性,那么 就是您需要做的。创建数据类型类型的属性:

    public ObservableCollection<YourItemtype> Items { get; set; }
    

    当然,请确保将 DataContext 设置为包含该属性的正确数据源。

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      相关资源
      最近更新 更多