【问题标题】:DataGrid shows path of image instead of image itselfDataGrid 显示图像的路径而不是图像本身
【发布时间】:2017-03-14 11:26:14
【问题描述】:

以下几行最终显示的是路径,而不是它通向的图像。 AutoGenerateColums 设置为 true,将其设置为 false 最终会出现完全空行。

System.Data.DataTable DataTable = new System.Data.DataTable();
System.Data.DataColumn DataColumn = new System.Data.DataColumn();

Uri uri = new Uri(@"C:/Users/User/Desktop/szagdoga/error.png");
BitmapImage img = new BitmapImage(uri);
DataColumn.DataType = img.GetType();
DataColumn.ColumnName = ("this");

DataTable.Columns.Add("Test #");
DataTable.Columns.Add(DataColumn);
DataTable.Columns.Add("Min Range");
DataTable.Columns.Add("Max Range");
DataTable.Columns.Add("Result");
for (int i = 6; i <50; i++)
    DataTable.Rows.Add(ExcelFile[0, i],img, ExcelFile[1,i],0,0,0);

ChannelDataGrid.ItemsSource = DataTable.DefaultView;

请帮助我以某种方式显示图像!谢谢。

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    首先,DataGrid默认生成DataGridTextColumns,我们必须使用AutoGeneratingColumn事件来改变列的类型。我们需要使用模板中包含 Image 的 DataGridTemplateColumn(图像源应绑定到正确的 DataTable 列)。定义模板的最佳位置是在资源中。

    这是解决问题的方法:

    xaml 部分

    <DataGrid Name="ChannelDataGrid" AutoGeneratingColumn="ChannelDataGrid_OnAutoGeneratingColumn">
    
        <DataGrid.Resources>
            <DataTemplate x:Key="ImgCell">
                <Image Source="{Binding Path=Img}"/>
            </DataTemplate>
        </DataGrid.Resources>        
    </DataGrid>
    

    代码:

    private void InitializeDataTable()
    {
        System.Data.DataTable DataTable = new System.Data.DataTable
        {
            Columns = {"Test #", "Img", "Min Range", "Max Range", "Result"}
        };
    
        Uri uri = new Uri(@"C:/Users/User/Desktop/szagdoga/error.png");
    
        for (int i = 6; i < 50; i++)
            DataTable.Rows.Add(ExcelFile[0, i], uri, ExcelFile[1, i], 0, 0);
    
        ChannelDataGrid.ItemsSource = DataTable.DefaultView;
    }
    
    private void ChannelDataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        if (e.PropertyName == "Img")
        {
            // replace text column with image column
            e.Column = new DataGridTemplateColumn
            {
                // searching for predefined tenplate in Resources
                CellTemplate = (sender as DataGrid).Resources["ImgCell"] as DataTemplate,
                HeaderTemplate = e.Column.HeaderTemplate,
                Header = e.Column.Header
            };
        }
    }
    

    【讨论】:

      【解决方案2】:

      使用Image 控件创建TemplateColumn 并设置AutoGenerateColumns to false

      【讨论】:

        猜你喜欢
        • 2015-08-07
        • 1970-01-01
        • 2023-03-25
        • 2016-03-09
        • 1970-01-01
        • 1970-01-01
        • 2011-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多