alo*_*str 5 c# wpf xaml datagrid .net-4.0
我使用DataGrid来显示数据库表中的项目,我使用的是EF CodeFirst,因此数据库查询会自动生成一个对象.
这是我的XAML:
<DataGrid Name="details" Margin="0,20,0,0" ItemsSource="{Binding}">
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
这是它背后的代码:
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;
Run Code Online (Sandbox Code Playgroud)
这解决了用我的数据库中的所有信息填充我的DataGrid.唯一的问题是我有两列我不想显示.我试图创建一个dataTemplate,它将使用我想要的列生成网格,但是当我将它绑定到datacontext时,它没有显示任何信息.
这是我的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>
Run Code Online (Sandbox Code Playgroud)
窗口xaml:
借方类(密钥属性用于创建代码优先数据库):
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; }
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Jak*_*eta 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>
Run Code Online (Sandbox Code Playgroud)
注意该AutoGenerateColumns="False"
属性.
如果我想控制单元格的渲染方式,我只会使用数据模板.如果您对默认演示文稿感到满意,我认为您不需要模板.
归档时间: |
|
查看次数: |
21006 次 |
最近记录: |