【问题标题】:DataGrid Column XAML数据网格列 XAML
【发布时间】:2012-08-27 04:30:24
【问题描述】:

我正在使用 DataGrid 来显示数据库表中的项目,并且我正在使用 EF CodeFirst,因此数据库查询会自动生成一个对象。

这是我的 XAML:

<DataGrid Name="details" Margin="0,20,0,0" ItemsSource="{Binding}">
</DataGrid>

这是它背后的代码:

data = new DbLayer();
        int cardNumId = (from dataCardNum in data.creditCards
                         where dataCardNum.creditCardNumber == cardNum
                         select dataCardNum.Id).First();
        debits =new ObservableCollection<Debit>(( from billings in data.charges
                   where billings.creditCardNumber.Id == cardNumId
                   select billings).ToList());
        DataContext = debits;

这解决了用我的数据库中的所有信息填充我的 DataGrid。唯一的问题是我有两列不想显示。我尝试创建一个 dataTemplate 来生成包含我想要的列的网格,但是当我将它绑定到 datacontext 时,它没有显示任何信息。

这是我的数据模板:

<DataTemplate x:Key="debitShow" DataType="DataTemplate:MonthBill.Debit">
        <DataGrid>
            <DataGrid.Columns>
                <DataGridTextColumn Header="amount" Binding="{Binding amount}"/>
                <DataGridTextColumn Header="charge date" Binding="{Binding chargeDate}"/>
                <DataGridCheckBoxColumn Header="charged" Binding="{Binding charged}"/>
                <DataGridTextColumn Header="store name" Binding="{Binding storeName}"/>
                <DataGridTextColumn Header="purchase date" Binding="{Binding debitDate}"/>
                <DataGridTextColumn Header="description" Binding="{Binding description}"/>
            </DataGrid.Columns>
        </DataGrid>
    </DataTemplate>

窗口xml:

借记类(key属性用于codefirst数据库创建):

class Debit
{        
    [Key]
    public int Id { get; set; }
    public int amount { get; set; }
    public string storeName { get; set; }
    public DateTime debitDate { get; set; }
    public DateTime chargeDate { get; set; }
    public string description { get; set; }
    public creditCard creditCardNumber { get; set; }
    public bool charged { get; set; }
}

有什么想法吗?

【问题讨论】:

  • 粘贴不起作用的 DataTemplate 代码。
  • @Randolf Rincón-Fadul 我添加了 xaml 和数据模板、我使用它的方式以及存储在数据库中的 calss

标签: c# wpf xaml .net-4.0 datagrid


【解决方案1】:

如果您的目标是在不显示不需要的两列的情况下显示数据,我建议采用更简单的方法,即明确指定网格的列:

<DataGrid  ItemsSource="{Binding}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="amount" Binding="{Binding amount}"/>
            <DataGridTextColumn Header="charge date" Binding="{Binding chargeDate}"/>
            <DataGridCheckBoxColumn Header="charged" Binding="{Binding charged}"/>
            <DataGridTextColumn Header="store name" Binding="{Binding storeName}"/>
            <DataGridTextColumn Header="purchase date" Binding="{Binding debitDate}"/>
            <DataGridTextColumn Header="description" Binding="{Binding description}"/>
        </DataGrid.Columns>
    </DataGrid>

注意AutoGenerateColumns="False"attribute.

如果我想控制单元格的呈现方式,我只会使用数据模板。如果您对默认演示文稿感到满意,我认为您不需要模板。

【讨论】:

  • 成功了!当我尝试仅显示某些列时,autogeneratecolumns 为真。 tyvm!
猜你喜欢
  • 2012-12-27
  • 1970-01-01
  • 2015-07-13
  • 2017-06-26
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
相关资源
最近更新 更多