mie*_*998 7 c# wpf binding datagrid image
我有个问题.
我希望在没有VS Designer的情况下以C#编程编写所有内容.
所以,我正在创建一个图像和DataGrid(我将它添加为MainWindow Grid的子代):
Image img = new Image();
Uri uri = new Uri(@"C:\d1.jpg");
img.Source = new System.Windows.Media.Imaging.BitmapImage(uri);
DataGrid dg = new DataGrid();
grid1.Children.Add(dg);
Run Code Online (Sandbox Code Playgroud)
然后我想添加4列,例如3个文本和1个图像.所以首先我需要创建一个包含样本数据的DataTable和DataRow:
DataTable dt = new DataTable();
dt.Columns.Add("Column1");
dt.Columns.Add("Column2");
dt.Columns.Add("Column3");
dt.Columns.Add("Column4", typeof(Image)); // type of image!
DataRow dr = dt.NewRow();
dr[0] = "aaa";
dr[1] = "bbb";
dr[2] = "ccc";
dr[3] = img; // add a sample image
dt.Rows.Add(dr);
Run Code Online (Sandbox Code Playgroud)
现在我有一个包含4列和1行数据的DataTable.
然后我需要做的就是像这样设置DataGrid的ItemsSource:
dg.ItemsSource = dt.DefaultView;
Run Code Online (Sandbox Code Playgroud)
我做错了什么?为什么在最终网格上连续有System.Windows.Controls.Image而不是真实图像?我需要绑定它还是什么?
我需要以编程方式完成的所有事情,没有设计师.
如何显示真实图像而不是该字符串?
仍然不知道如何 100% 编程地做到这一点,但我弄清楚了。
最重要的是DataGrid(或GridView)不支持Image。为什么?别问我。所以我将图像更改为 BitmapImage,它的效果就像一个魅力。
所以我的修改如下:
Uri uri = new Uri(@"C:\d1.jpg");
BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage(uri);
...
DataGrid dg = new DataGrid();
dg.AutoGenerateColumns = false;
DataGridTemplateColumn col1 = (DataGridTemplateColumn)this.FindResource("dgt");
dg.Columns.Add(col1);
DataGridTextColumn col2 = new DataGridTextColumn();
col2.Header = "Column2";
col2.Binding = new Binding("Column2");
dg.Columns.Add(col2);
...
DataTable dt = new DataTable();
dt.Columns.Add("Column1", typeof(BitmapImage));
dt.Columns.Add("Column2");
DataRow dr = dt.NewRow();
dr[0] = bmp;
dr[1] = "test";
dt.Rows.Add(dr);
...
dg.ItemsSource = dt.DefaultView;
grid1.Children.Add(dg);
Run Code Online (Sandbox Code Playgroud)
但我需要将资源添加到 XAML(不知道如何编程)。于是就有了一段代码:
<Window.Resources>
<DataGridTemplateColumn x:Key="dgt" Header="Column1" Width="SizeToCells">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Column1}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
一切正常!
GridView 或 ListView 也是如此。希望它能帮助某人。
| 归档时间: |
|
| 查看次数: |
8001 次 |
| 最近记录: |