【问题标题】:avoid creating empty row in datagrid避免在数据网格中创建空行
【发布时间】:2016-07-25 14:19:03
【问题描述】:

我有两个类 Cricket、Football 和 List of Observable 类型的对象集合。基于某些条件,我想将 Cricket/Football 类型的对象添加到 Observable Collection。我没有分配任何数据,即只是创建 Cricket/Football 类的实例并将该实例添加到 Observable Collections 并绑定到 UI。我的期望是,因为我没有为 Cricket/Football 的实例分配任何数据,所以只有标题必须在数据网格中创建。但是我发现一行具有在相应类下定义的变量的默认值以及行标题,因为我正在创建该类的实例。我应该如何避免在我的数据网格标题不受影响的情况下创建空行。

<DataGrid SelectionMode="Single" VerticalAlignment="Stretch" ItemsSource="{Binding itemSource, UpdateSourceTrigger=PropertyChanged}"  CanUserReorderColumns="False" CanUserAddRows="False" IsReadOnly="True" CanUserDeleteRows="False" CanUserResizeColumns="False" HorizontalGridLinesBrush="Black" VerticalGridLinesBrush="Black" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Disabled" />

Edit

【问题讨论】:

  • 您需要提供更多代码才能更好地理解您的问题。
  • 我了解 Ayyapppan。我无法发布完整的问题,因为我在提交问题时遇到了一些错误。
  • Ayyapppan,因为我无法添加完整的问题,所以我添加了其余的图像。去编辑链接。谢谢。
  • 如果你的 OC 包含一些元素,那么它将被 DataGrid 使用,你的变量当然会包含默认值。
  • 我了解安居姆。没有任何替代方法可以避免将默认行绑定到 DataGrid。如果这根本不可能,有什么方法可以在绑定后从 DataGrid 中删除该默认行。

标签: wpf


【解决方案1】:

我认为您的数据网格的CanUserAddRows 属性设置为true。只需将其设置为 false 即可解决您的问题。

CanUserAddRows="false"
IsReadOnly="True"

编辑: 对不起。我现在正确地阅读了你的问题。这是因为 ObservableCollection 的类型是对象。我将向您展示一个小示例,以便您了解绑定在数据网格中的工作原理。您的集合应该具有公共属性,因此 datagrid 可以将列绑定到它。如果您使用 Object 的集合类型,那么您没有用于绑定的属性,因此将显示空行。

XAML:.

<DataGrid AutoGenerateColumns="False" Height="253" HorizontalAlignment="Left" Margin="27,24,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="448">
            <DataGrid.Columns>
                <DataGridTextColumn Header="First" Binding="{Binding Path=Field, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            </DataGrid.Columns>
 </DataGrid>

背后的代码:

public partial class MainWindow : Window 
{ 
    public ObservableCollection dataSource;
    public MainWindow()
    {
        InitializeComponent();

        this.dataSource = new ObservableCollection<SomeDataSource>();

        this.dataSource.Add(new SomeDataSource { Field = "123" });
        this.dataSource.Add(new SomeDataSource { Field = "1234" });
        this.dataSource.Add(new SomeDataSource { Field = "12345" });

        this.dataGrid1.ItemsSource = this.dataSource;
    }
}

public class SomeDataSource
{
    public string Field {get;set;}
}

【讨论】:

  • 请查看我在问题中发布的 xaml。我已经试过了。当我创建一个类的实例并将该实例添加到 Observable Collection 列表并将该列表绑定到 DataGrid 时,我将创建一个默认行,其中包含在该类中声明的变量的默认值。我知道这种行为是自然的,我无法覆盖它。那么是否有任何方法可以删除该默认行,以便我的数据网格标题不受影响。
  • 首先,我没有使用 DataGrid.Columns 创建静态列。我只希望 DataGrid 采用我指定的类的定义,即它只需要将类中定义的属性绑定到 DataGrid Header,而不是使用该类中属性的默认值创建默认行。跨度>
  • @SharanRM:您可以根据需要使用数据类。我只是指定了一个例子。由于您使用的是 ObservableCollection 类型的 object,因此添加了空白行。请用示例中提到的数据类替换它,它应该可以工作。希望你明白了。
  • 无论您提出什么建议,如果我知道要定义的 Observable Collection 的类型,都可以正常工作。在我的场景中,我有两个类,根据某些条件,我将创建我希望在 DataGrid 中呈现的类的对象,然后将该对象添加到类型对象的 Observable Collection 列表中。我只会在运行时知道我需要创建什么类型的对象。
  • 我明白了。但是您最初将 Datagrid 的源绑定到类型对象的 Observable Collection 对吗?这就是问题的根源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
相关资源
最近更新 更多