添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
private void m_dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
            var a = e.Value;
            if (a != null && LstColors.Contains(a))
                var color = GetColorFromCode(a.ToString());
                var g = e.Graphics;
                Brush b=new SolidBrush(color);
                var rec = e.CellBounds;
                rec.X += 2;
                rec.Y += 2;
                rec.Width -= 20;
                rec.Height -= 10;
                e.PaintContent(rec);
                g.FillRectangle(b, rec);
                e.Handled = true;
public partial class Form1 : Form
        private string xml =
                          @"<?xml version='1.0' standalone='yes'?>
                            <GenioCodes>
                              <Code No.='1'  name='A' Colour='Blue' />
                              <Code No.='2'  name='B' Colour='Green' />
                              <Code No.='3'  name='C' Colour='Red' />
                              <Code No.='4'  name='N' Colour='Black' />
                            </GenioCodes>";
        DataSet m_dataSet = new DataSet();
        List<ComboBox>ListCbx=new List<ComboBox>();
        public Form1()
            InitializeComponent();
            // reading xml from string
            var reader = XmlReader.Create(new StringReader(xml));
            m_dataSet.ReadXml(reader);
            m_dataGridView.DataSource = m_dataSet.Tables[0];
            var column = m_dataGridView.Columns["Colour"];
            int idx = column.Index;
            // removing text column
            m_dataGridView.Columns.RemoveAt(idx);
            // adding comboBox column
            var cbo = new DataGridViewComboBoxColumn
                Name = "color",
                DataPropertyName = "Colour",
            // unique color codes for comboBox
            var colorCodes = m_dataSet.Tables[0].AsEnumerable()
                        .Select(r => r["Colour"])
                        .Distinct()
                        .ToList();
            cbo.DataSource = colorCodes;
            // restore column in orignal position
            m_dataGridView.Columns.Insert(idx, cbo);
            m_dataGridView.EditingControlShowing += ComboBoxShowing;
            //disallow adding and deleting rows
            m_dataGridView.AllowUserToAddRows = false;
            m_dataGridView.AllowUserToDeleteRows = false;
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ComboBoxShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            if (e.Control is ComboBox theCB)
                theCB.DrawMode = DrawMode.OwnerDrawFixed;
                    theCB.DrawItem -= new DrawItemEventHandler(this.ComboItemDraw);
                catch { }
                theCB.DrawItem += new DrawItemEventHandler(this.ComboItemDraw);
                ListCbx.Add(theCB);
        /// <summary>
        /// Custom drawing for comboBox items
        /// </summary>
        private void ComboItemDraw(object sender, DrawItemEventArgs e)
            Graphics g = e.Graphics;
            Rectangle rDraw = e.Bounds;
            rDraw.Inflate(-1, -1);
            bool bSelected = Convert.ToBoolean(e.State & DrawItemState.Selected);
            bool bValue = Convert.ToBoolean(e.State & DrawItemState.ComboBoxEdit);
            rDraw = e.Bounds;
            rDraw.Inflate(-1, -1);
            if (bSelected & !bValue)
                g.FillRectangle(Brushes.LightBlue, rDraw);
                g.DrawRectangle(Pens.Blue, rDraw);
                g.FillRectangle(Brushes.White, e.Bounds);
            if (e.Index < 0)
                return;
            string code = ((ComboBox)sender).Items[e.Index].ToString();
            Color c = GetColorFromCode(code);
            string s = c.ToString();
            SolidBrush b = new SolidBrush(c);
            Rectangle r = new Rectangle(e.Bounds.Left, e.Bounds.Top, e.Bounds.Width, e.Bounds.Height);
            g.FillRectangle(b, r);
            g.DrawRectangle(Pens.Black, r);
            //g.DrawString(s, Form.DefaultFont, Brushes.Black, e.Bounds.Left + 25, e.Bounds.Top + 1);
            b.Dispose();
        List<String> LstColors = new List<string>() { "Blue", "Green", "Red", "Black" };
        /// <summary>
        /// Returns color for a given code 
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        private Color GetColorFromCode(string code)
            switch (code)
                case "Blue": return Color.Blue;
                case "Green": return Color.Green;
                case "Red": return Color.Red;
                case "Black": return Color.Black;
            return Color.Red;
        int index;
        private void m_dataGridView_CellEnter(object sender, DataGridViewCellEventArgs e)
            index = e.RowIndex;
            //实现单击一次显示下拉列表框
            if (m_dataGridView.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && e.RowIndex != -1)
                SendKeys.Send("{F4}");
        private void m_dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
            var a = e.Value;
            if (a != null && LstColors.Contains(a))
                var color = GetColorFromCode(a.ToString());
                var g = e.Graphics;
                Brush b=new SolidBrush(color);
                var rec = e.CellBounds;
                rec.X += 2;
                rec.Y += 2;
                rec.Width -= 20;
                rec.Height -= 10;
                e.PaintContent(rec);
                g.FillRectangle(b, rec);
                e.Handled = true;

来自问题:https://q.cnblogs.com/q/137678/#a_279065