DataGridView 初始化完成后,在combox里显示颜色,如这样:

DataGridView 注册 cellPainting事件:
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; } /// <summary>
/// Activates custom drawing in comboBoxes
/// </summary>
/// <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;
try
{
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);
}
else
{
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

C# Datagridview combox列 初始化颜色的更多相关文章

  1. .NET组件控件实例编程系列——5.DataGridView数值列和日期列

    在使用DataGridView编辑数据的时候,编辑的单元格一般会显示为文本框,逻辑值和图片会自动显示对应类型的列.当然我们自己可以手工选择列的类型,例如ComboBox列.Button列.Link列. ...

  2. DataGridView数值列和日期列

    本文转自:http://www.cnblogs.com/conexpress/p/5923324.html 在使用DataGridView编辑数据的时候,编辑的单元格一般会显示为文本框,逻辑值和图片会 ...

  3. ALV的颜色分为行的颜色、列的颜色和CELL的颜色

    ALV的颜色分为行的颜色.列的颜色和CELL的颜色.任务要求,将一定的Tabellenfeld 用黄色填充,也就是说CELL的颜色 DATA:ls_cellcolorTYPElvc_s_scol,co ...

  4. DataGridView绑定数据库,取得的数据插入到DataGridView指定列(一)

    实现: 点击button1,从数据库中获得数据,指定数据库的某列数据插入到DataGridView指定列 一.双击button1进入事件代码 private void button1_Click(ob ...

  5. HTML输出 一 控制列背景颜色

    #将需要读取的域名和端口列表保存在名为ports01.txt.ports02的文件中,文件与脚本位于相同目录下$CurrentPath = $MyInvocation.MyCommand.Path.s ...

  6. groupbox 下的datagridview的列标题字体修改混乱

        groupbox 下的datagridview的列标题字体修改混乱

  7. dev gridControl 自定义绘制列头颜色

    1.添加事件CustomDrawColumnHeader private void gvw1_CustomDrawColumnHeader(object sender, DevExpress.Xtra ...

  8. C#中关于DataGridView行和列的背景色-前景色设置

    关于DataGridView行和列的背景色-前景色设置 1.设定DataGridView全部单元格的Style  DataGridView内所有单元格的Style变更,可以使用DataGridView ...

  9. datagridview 日期列排序

    1.datagridview 日期列排序 private void Form1_Load(object sender, EventArgs e) { //方法1 dataGridView1.Colum ...

  10. (转)datagridview 自定义列三步走

    本文转载自:http://blog.csdn.net/zx13525079024/article/details/4814642 我们如果想自定义实现datagridview的某列,例如是datagr ...

随机推荐

  1. openGauss/MogDB-3.0.0 dcf测试(非om安装)

    openGauss/MogDB-3.0.0 dcf 测试(非 om 安装) 本文出处:https://www.modb.pro/db/402037 IP 地址 ... LERDER ... FOLLO ...

  2. React中类组件和函数组件

    一.类组件 类组件,顾名思义,也就是通过使用ES6类的编写形式去编写组件,该类必须继承React.Component 如果想要访问父组件传递过来的参数,可通过this.props的方式去访问 在组件中 ...

  3. 浏览器端实现类似input限制输入两位小数,输入时光标从输入位置移动到最后

    1.问题描述展示 示例代码所做限制为不允许输入字母d,其他限制规则可以根据需求自己调整,使用React编写,其他框架或原生均可根据该代码理解原理进行转变,特意使用了中文键盘可以看到输入框下面白色框闪出 ...

  4. el-tree选中子级时默认选中父级(角色授权)

    问题1:选中子级时默认选中父级 <el-tree :data="menuData" show-checkbox default-expand-all node-key=&qu ...

  5. 力扣578(MySQL)-查询回答率最高的问题(中等)

    题目: 从 survey_log 表中获得回答率最高的问题,survey_log 表包含这些列:id, action, question_id, answer_id, q_num, timestamp ...

  6. 基于 Flink CDC 实现海量数据的实时同步和转换

    简介: 徐榜江在 5.21 Flink CDC Meetup 的分享. 摘要:本文整理自 Apache Flink Committer,Flink CDC Maintainer,阿里巴巴高级开发工程师 ...

  7. 2021云栖大会开源引力峰会重磅发布的战略合作,Grafana服务到底是什么?

    简介: 这几天关注云栖大会的小伙伴一定会发现阿里巴巴合伙人.阿里云高级研究员蒋江伟(小邪)在云栖大会开源引力峰会的演讲中,特别提到了一个叫 Grafana 服务的产品,并特意花费一页 PPT 介绍了这 ...

  8. WPF 使用 ManipulationDemo 工具辅助调试设备触摸失效问题

    本文将和大家介绍我所在的团队开源的 ManipulationDemo 工具.通过 ManipulationDemo 工具可以提升调试设备触摸失效的效率 此工具在 GitHub 上完全开源,请看 htt ...

  9. dotnet 读 WPF 源代码笔记 聊聊 HwndWrapper.GetGCMemMessage 调试消息

    我在阅读 WPF 源代码,在 HwndWrapper 的静态构造函数看到了申请了 HwndWrapper.GetGCMemMessage 这个 Windows 消息,好奇这个消息是什么功能的.通过阅读 ...

  10. 2018-8-29-dotnet-core-2.1-使用阶梯编译

    title author date CreateTime categories dotnet core 2.1 使用阶梯编译 lindexi 2018-08-29 08:49:12 +0800 201 ...