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 に入力することで解決します。唯一の問題は、表示したくない列が 2 つあることです。必要な列でグリッドを生成する 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>

ウィンドウの xaml:

Debit クラス (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; }
}

何か案は?

4

1 に答える 1

10

必要のない2つの列を使用せずにデータを表示することが目的の場合は、グリッドの列を明示的に指定するという、より単純なアプローチを取ることをお勧めします。

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

セルのレンダリング方法を制御したい場合にのみ、データテンプレートを使用します。デフォルトのプレゼンテーションに満足している場合は、テンプレートは必要ないと思います。

于 2012-09-02T03:39:11.860 に答える