【发布时间】:2016-12-27 07:15:22
【问题描述】:
我已将一个数据表(在运行时填充)绑定到我的数据网格,并且有一列列出了文件路径。我正在自定义该列以用图像按钮替换文件路径以在单击时打开文件。我收到以下错误,但无法解决。任何方向将不胜感激!
错误: System.Core.dll 中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的未处理异常 附加信息:“System.Data.DataRowView”不包含“Master”的定义
我的按钮事件出现错误...“d.Master”。
private void ButtonClick(object sender, RoutedEventArgs e)
{
Button button2 = (Button)e.OriginalSource;
dynamic d = button2.DataContext;
string filepath = d.Master;
Process.Start(filepath);
}
数据网格:
<DataGrid x:Name="DataGrid1" HorizontalAlignment="Stretch"
Margin="650,197,449,0" VerticalAlignment="Stretch"
AutoGenerateColumns="True" AutoGeneratingColumn="DataGrid_AugoGeneratingColumn" ItemsSource="{Binding fileTable}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Master" CellTemplate="{StaticResource DataTemplate2}"/>
</DataGrid.Columns>
</DataGrid>
数据模板
<DataTemplate x:Key="DataTemplate2">
<Button Name="fileButton" Click="ButtonClick" Width="30" Height="30" BorderBrush="#FF707070" BorderThickness="1,1,0,1">
<Button.Background>
<ImageBrush ImageSource="C:\Images\PDFicon.png" Stretch="Uniform"/>
</Button.Background>
</Button>
</DataTemplate>
AutoGeneratingColumn 方法:
private void DataGrid_AugoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.Column.Header.ToString() == "Master")
{
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn //create new template column
CellTemplate = (DataTemplate) Resources["DataTemplate2"]
e.Column = templateColumn; // Replace the auto-generated column with the templateColumn.
}
else
{
e.Column.Header = "Expired";
}
}
【问题讨论】:
-
错误似乎很清楚。您的代码假定该对象具有
Master属性,但事实并非如此。但是您没有提供一个很好的 minimal reproducible example 来清楚地显示此代码的上下文以及您可能的意思,而不是尝试获取Master属性。也许您可以按照建议添加Master属性,也许不是。没有更好的代码示例是不可能知道的。
标签: c# wpf xaml datagrid datatemplate