数据网格列 XAML

6

我正在使用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,用于生成我想要的列的网格,但当我将其绑定到数据上下文时,它没有显示任何信息。

这是我的dataTemplate:

<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>

窗口 XAML:

借记类(关键属性用于 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 代码。 - Erre Efe
@Randolf Rincón-Fadul 我添加了DataTemplate的XAML代码,以及我使用它的方式和存储在数据库中的类。 - alostr
1个回答

10

如果您的目标是显示自己的数据,而不需要那两列数据,我建议采用更简单的方法,只需明确指定您网格的列:

<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" 属性

如果你满意默认的表现形式,我只会在想要控制单元格呈现方式时使用数据模板。如果您对默认的呈现方式满意,则不需要模板。


2
它成功了!当我尝试仅显示某些列时,autogeneratecolumns为true。非常感谢! - alostr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接