![](/img/trans.png)
[英]C# WPF - Adding an image to a dataset or datagrid - code behind only
[英]Adding image do DataGrid programically in C# wpf project - how?
我有個問題。
我希望在沒有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);
然后我想添加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);
現在我有一個包含4列和1行數據的DataTable。
然后我需要做的就是像這樣設置DataGrid的ItemsSource:
dg.ItemsSource = dt.DefaultView;
我做錯了什么? 為什么在最終網格上連續有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);
但我需要將資源添加到XAML(不知道如何編程)。 所以有一個代碼:
<Window.Resources>
<DataGridTemplateColumn x:Key="dgt" Header="Column1" Width="SizeToCells">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Column1}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</Window.Resources>
一切都很好!
GridView或ListView也是如此。 希望它可以幫助某人。
這里有一個非常簡單的例子,對我幫助很大
http://www.c-sharpcorner.com/Forums/Thread/80586/displaying-images-in-datagrid-in-wpf-C-Sharp.aspx
我調整了MVVM的示例代碼
視圖
<DataGrid x:Name="dgGrid" ItemsSource="{Binding collection}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Image">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Height="25" Width="50" Source="{Binding path}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding name}"/>
</DataGrid>
實體
public class File
{
public string path{ get; set; }
public string name{ get; set; }
}
視圖模型
var collection = new ObservableCollection<File>();
collection.Add(new File() { path=@"C:\Users\homeIcon.png", name="Home" });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.