zoukankan      html  css  js  c++  java
  • Winform DataGridView列的单元格中动态添加图片和文字

    先上图在说,第二列中图片和文字的样式

    1、需要重写DataGridViewTextBoxColumn,新建类TextAndImageColumn.cs

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Windows.Forms;
      6 using System.Drawing;
      7 
      8 namespace DataGridViewTest
      9 {
     10     public class TextAndImageColumn : DataGridViewTextBoxColumn
     11     {
     12         private Image imageValue;
     13         private Size imageSize;
     14 
     15         public TextAndImageColumn()
     16         {
     17             this.CellTemplate = new TextAndImageCell();
     18         }
     19 
     20         public override object Clone()
     21         {
     22             TextAndImageColumn c = base.Clone() as TextAndImageColumn;
     23             c.imageValue = this.imageValue;
     24             c.imageSize = this.imageSize;
     25             return c;
     26         }
     27 
     28         public Image Image
     29         {
     30             get { return this.imageValue; }
     31             set
     32             {
     33                 if (this.Image != value)
     34                 {
     35                     this.imageValue = value;
     36                     this.imageSize = value.Size;
     37 
     38                     if (this.InheritedStyle != null)
     39                     {
     40                         Padding inheritedPadding = this.InheritedStyle.Padding;
     41                         this.DefaultCellStyle.Padding = new Padding(imageSize.Width,
     42                     inheritedPadding.Top, inheritedPadding.Right,
     43                     inheritedPadding.Bottom);
     44                     }
     45                 }
     46             }
     47         }
     48         private TextAndImageCell TextAndImageCellTemplate
     49         {
     50             get { return this.CellTemplate as TextAndImageCell; }
     51         }
     52         internal Size ImageSize
     53         {
     54             get { return imageSize; }
     55         }
     56     }
     57 
     58     public class TextAndImageCell : DataGridViewTextBoxCell
     59     {
     60         private Image imageValue;
     61         private Size imageSize;
     62 
     63         public override object Clone()
     64         {
     65             TextAndImageCell c = base.Clone() as TextAndImageCell;
     66             c.imageValue = this.imageValue;
     67             c.imageSize = this.imageSize;
     68             return c;
     69         }
     70 
     71         public Image Image
     72         {
     73             get
     74             {
     75                 if (this.OwningColumn == null ||
     76            this.OwningTextAndImageColumn == null)
     77                 {
     78 
     79                     return imageValue;
     80                 }
     81                 else if (this.imageValue != null)
     82                 {
     83                     return this.imageValue;
     84                 }
     85                 else
     86                 {
     87                     return this.OwningTextAndImageColumn.Image;
     88                 }
     89             }
     90             set
     91             {
     92                 if (this.imageValue != value)
     93                 {
     94                     this.imageValue = value;
     95                     this.imageSize = value.Size;
     96 
     97                     Padding inheritedPadding = this.InheritedStyle.Padding;
     98                     this.Style.Padding = new Padding(imageSize.Width,
     99                    inheritedPadding.Top, inheritedPadding.Right,
    100                    inheritedPadding.Bottom);
    101                 }
    102             }
    103         }
    104         protected override void Paint(Graphics graphics, Rectangle clipBounds,
    105        Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState,
    106        object value, object formattedValue, string errorText,
    107        DataGridViewCellStyle cellStyle,
    108        DataGridViewAdvancedBorderStyle advancedBorderStyle,
    109        DataGridViewPaintParts paintParts)
    110         {
    111             // Paint the base content
    112             base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState,
    113               value, formattedValue, errorText, cellStyle,
    114               advancedBorderStyle, paintParts);
    115 
    116             if (this.Image != null)
    117             {
    118                 // Draw the image clipped to the cell.
    119                 System.Drawing.Drawing2D.GraphicsContainer container =
    120                graphics.BeginContainer();
    121 
    122                 graphics.SetClip(cellBounds);
    123                 graphics.DrawImageUnscaled(this.Image, cellBounds.Location);
    124 
    125                 graphics.EndContainer(container);
    126             }
    127         }
    128 
    129         private TextAndImageColumn OwningTextAndImageColumn
    130         {
    131             get { return this.OwningColumn as TextAndImageColumn; }
    132         }
    133     }
    134 }

    2、新建窗体Form1.cs,拖控件DataGridView到窗体,代码如下

      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Linq;
      7 using System.Text;
      8 using System.Windows.Forms;
      9 using System.Data.SqlClient;
     10 
     11 namespace DataGridViewTest
     12 {
     13     public partial class Form1 : Form
     14     {
     15         private static string imagePath = AppDomain.CurrentDomain.BaseDirectory.Substring(0, AppDomain.CurrentDomain.BaseDirectory.IndexOf("bin")) + "Images\";//列表图片路径
     16         public Form1()
     17         {
     18             InitializeComponent();
     19             InitControlsProperties();
     20         }
     21 
     22         private void InitControlsProperties()
     23         {
     24             this.dataGridView1.AutoGenerateColumns = false;
     25             TextAndImageColumn ColumnRoleID = new TextAndImageColumn();
     26             ColumnRoleID.DataPropertyName = "RoleID";
     27             ColumnRoleID.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
     28             ColumnRoleID.Name = "RoleID";
     29             ColumnRoleID.HeaderText = "权限ID";
     30             ColumnRoleID.Width = 200;
     31             this.dataGridView1.Columns.Add(ColumnRoleID);
     32 
     33             this.dataGridView1.AutoGenerateColumns = false;
     34             TextAndImageColumn ColumnRoleName = new TextAndImageColumn();
     35             ColumnRoleName.DataPropertyName = "RoleName";
     36             ColumnRoleName.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
     37             ColumnRoleName.Name = "RoleName";
     38             ColumnRoleName.HeaderText = "权限名称";
     39             ColumnRoleName.Width = 100;
     40             this.dataGridView1.Columns.Add(ColumnRoleName);
     41 
     42             this.dataGridView1.AutoGenerateColumns = false;
     43             TextAndImageColumn ColumnDescription = new TextAndImageColumn();
     44             ColumnDescription.DataPropertyName = "Description";
     45             ColumnDescription.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
     46             ColumnDescription.Name = "Description";
     47             ColumnDescription.HeaderText = "描述";
     48             ColumnDescription.Width = 150;
     49             this.dataGridView1.Columns.Add(ColumnDescription);
     50         }
     51 
     52         private void Form1_Load(object sender, EventArgs e)
     53         {
     54             string strConn = "Data Source=XIAN-PC;Initial Catalog=ReportServer;Persist Security Info=True;User ID=sa;Password=sa";
     55             SqlConnection conn = new SqlConnection(strConn);
     56             string strSql = "select * from Roles";
     57             SqlCommand cmd = new SqlCommand(strSql, conn);
     58             SqlDataAdapter adapter = new SqlDataAdapter(cmd);
     59             DataSet ds = new DataSet();
     60             conn.Open();
     61             adapter.Fill(ds, "Roles");
     62             conn.Close();
     63             this.dataGridView1.DataSource = ds.Tables["Roles"];
     64         }
     65 
     66         private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
     67         {
     68             #region 第二列
     69             if (e.ColumnIndex == 1)
     70             {
     71                 TextAndImageCell cell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as TextAndImageCell;
     72                 if (cell != null && e.Value != null)
     73                 {
     74                     try
     75                     {
     76                         string ajzt = cell.Value.ToString();
     77                         string path = imagePath;
     78                         switch (ajzt)
     79                         {
     80                             case "发布者":
     81                                 path += "1.png";
     82                                 break;
     83                             case "浏览者":
     84                                 path += "2.png";
     85                                 break;                            
     86                             default:
     87                                 path += "3.png";
     88                                 break;
     89                         }
     90                         cell.Image = GetImage(path);
     91                     }
     92                     catch (Exception ex)
     93                     {
     94 
     95                     }
     96                 }
     97             }
     98             #endregion
     99         }
    100 
    101         public System.Drawing.Image GetImage(string path)
    102         {
    103             return System.Drawing.Image.FromFile(path);
    104         }
    105 
    106     }
    107 }
  • 相关阅读:
    转数组
    字符串分割(分行)
    字符串操作:判断相等、判断首尾、大小写转换
    字符串操作:索引位置、去空格、替换字符串
    数组(遍历、转置、元素替换、排序、复制)
    专利申请教程
    循环语句
    条件语句
    输入
    h.264直接预测
  • 原文地址:https://www.cnblogs.com/liangwenchao-912/p/5024172.html
Copyright © 2011-2022 走看看