对于使用“DataGridView”的 Windows 窗体应用程序,如何检查数据源中的值并更改单独单元格的颜色?
Posted
技术标签:
【中文标题】对于使用“DataGridView”的 Windows 窗体应用程序,如何检查数据源中的值并更改单独单元格的颜色?【英文标题】:For a Windows Forms Application using `DataGridView`, how can I check a value in my DataSource and change the color of a separate cell? 【发布时间】:2016-09-16 22:27:35 【问题描述】:非常具体的问题,我知道。我不确定如何最好地表达这一点。目前,我的cell_formatting
方法将根据单元格的值更改单元格的颜色:
dataGridView.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.cell_formatting);
....
public void cell_formatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
if (dataGridView.Columns[e.ColumnIndex].Name.Equals("LocCode"))
if (e.Value.ToString() == "OK")
e.CellStyle.BackColor = Color.Red;
我真正需要做的是检查与我正在更改颜色的列索引不同的列索引。有一列color
将决定LocCode
单元格将变为什么颜色。
我想有一种方法可以在 cell_formatting()
中捕获我的 dataGridView.DataSource
中的哪个项目正在被查看,但我不知道如何访问它。
【问题讨论】:
【参考方案1】:我建议你使用 DataTable 来获取颜色值。这是一个简单的例子。
我制作了一个表格并在其中添加了 3 条记录。
在form_load中,数据加载到DataGridView,
DataTable dt;
private void Form1_Load(object sender, EventArgs e)
SqlConnection conn = new SqlConnection("Server=serverName;Database=db;Trusted_Connection=True");
conn.Open();
SqlCommand cmd = new SqlCommand("select * from TestTable", conn);
dt = new DataTable();
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dt);
dataGridView1.DataSource = dt;
然后,我们来了 cell_formatting 事件,
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("TestName")) // LocCode
if (e.Value != null && e.Value.ToString() != "") // Check for extra line
string a = dt.Rows[e.RowIndex]["Color"].ToString(); //current row's Color column value.
e.CellStyle.BackColor = Color.FromName(a); // color as backcolor
输出;
希望有所帮助,
【讨论】:
【参考方案2】:我想有一种方法可以在 cell_formatting() 中捕获我的 dataGridView.DataSource 中的哪个项目,但我不知道如何访问它。
当然有。
首先,使用DataGridViewCellFormattingEventArgs.RowIndex
属性获取正在格式化的行的索引。然后使用索引获取对应的DataRow
对象,最后使用DataGridViewRow.DataBoundItem
属性获取对应的数据源对象,将其转换为合适的类型:
var item = dataGridView.Rows[e.RowIndex].DataBoundItem as YourDataSourceObjectType;
【讨论】:
这似乎正是我所需要的。我会实施并通知您! 好吧,看起来不错,但我在实施时不可避免地会遇到我们的范围错误。 Snippet of code 你正在使用e.ColumnIndex
,而你应该使用e.RowIndex
:)以上是关于对于使用“DataGridView”的 Windows 窗体应用程序,如何检查数据源中的值并更改单独单元格的颜色?的主要内容,如果未能解决你的问题,请参考以下文章
对于使用“DataGridView”的 Windows 窗体应用程序,如何检查数据源中的值并更改单独单元格的颜色?