런타임에 채워지는 datatable을 데이터 그리드에 바인딩하고 파일 경로를 나열하는 하나의 열을 바인딩했습니다. 나는이 열을 사용자 정의하여 파일 경로를 이미지 버튼으로 바꾸어 클릭 할 때 파일을 엽니 다. 다음 오류가 표시되지만 해결할 수 없습니다. 모든 방향은 크게 감사하겠습니다!버튼 클릭 이벤트에 대한 처리되지 않은 예외
오류 : 타입 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'의 처리되지 않은 예외가 System.Core.dll에 추가 정보를 발생 'System.Data.DataRowView'는 '마스터'에 대한 정의가 포함되어 있지 않습니다
버튼 이벤트에 오류가 발생했습니다. "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을
<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'속성이 있다고 가정하지만 실제로는 아닙니다. 그러나 당신은이 코드의 문맥을 명확하게 보여주는 좋은 [mcve]를 제공하지 않았으며 '마스터'속성을 얻으려고 시도하지 않고 의도했던 것만 제공했을 것입니다. 어쩌면 마스터 속성을 제안 된대로 추가 할 수 있습니다. 더 나은 코드 예제 없이는 알 수 없습니다. –