如何根据数据源的某一列改变DataGridView的行背景色。
(这一列并不在界面上显示。)
12 个解决方案
#1
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
//若本行不为空行并且无物料名称则显示灰色
if (dataGridView1.Rows[e.RowIndex].Cell["abcd"].Value=="Text1")
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Gray;
else
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
{
//若本行不为空行并且无物料名称则显示灰色
if (dataGridView1.Rows[e.RowIndex].Cell["abcd"].Value=="Text1")
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Gray;
else
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
#2
不显示,没什么关系
private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
if (e.RowIndex > = dataGridView1.Rows.Count - 1)
return;
DataGridViewRow dgr = dataGridView1.Rows[e.RowIndex];
try
{
if (dgr.Cells[ "列名 "].Value.ToString() == "比较值 ")
{
dgr.DefaultCellStyle.ForeColor = 设置的颜色;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
#3
哥们,我说了,判定列“abcd”并不在界面上显示。
所以,无法使用“if (dataGridView1.Rows[e.RowIndex].Cell["abcd"].Value=="Text1")”这样的判断。
#4
你的意思是,把那列绑定到Grid上,然后设置Visible=false,是这个意思吧。
可是如果连绑定也不允许呢。
就是想通过数据源判断怎么做?
还有啊,Grid上显示的是通过主从关系绑定的内容,单纯靠行的索引值从数据源中取,好像也不行。
#5
你把那列掩藏不就可以了,,显不显示并没关系
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
try
{
if (dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString()=="2")
{
e.CellStyle.BackColor = Color.Red;
}
}
#6
这一列虽然不显示,但是你依然可以使用它的值啊,除了该列的Visible设为false以外,其他的没有任何区别
#7
我明白了,就是说没什么办法从数据源中取数据了,只能绑定到Grid上,然后设置其Visible=false这一招了。
#8
如果是 DataSource 赋值的,在 RowPrePaint 事件里转换 DataSource 取出不显示列的值
#9
不好意思,不太明白。
“在 RowPrePaint 事件里转换 DataSource 取出不显示列的值”
这里指的是把谁转换成DataSource?
#10
假如里赋值是一个 DataTable,可以在 RowsAdded 事件中处理
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
DataTable dtbl = (DataTable)dataGridView1.DataSource;
for (int i = e.RowIndex; i < e.RowIndex + e.RowCount; i++)
{
DataGridViewRow dgvrw = dataGridView1.Rows[i];
DataRow drw = dtbl.Rows[i];
dgvrw.DefaultCellStyle.BackColor = 根据 drw 中某一列的值设置颜色;
}
}
#11
问题已经解决:
for (int i = 0; i < mainGrid.Rows.Count; i++)
{
DataRow row = (mainGrid.Rows[i].DataBoundItem as DataRowView).Row;
if (row == null)
return;
....
}
for (int i = 0; i < mainGrid.Rows.Count; i++)
{
DataRow row = (mainGrid.Rows[i].DataBoundItem as DataRowView).Row;
if (row == null)
return;
....
}
#12
支持楼上大侠的呢
支持
支持
#1
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
//若本行不为空行并且无物料名称则显示灰色
if (dataGridView1.Rows[e.RowIndex].Cell["abcd"].Value=="Text1")
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Gray;
else
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
{
//若本行不为空行并且无物料名称则显示灰色
if (dataGridView1.Rows[e.RowIndex].Cell["abcd"].Value=="Text1")
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Gray;
else
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
#2
不显示,没什么关系
private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
if (e.RowIndex > = dataGridView1.Rows.Count - 1)
return;
DataGridViewRow dgr = dataGridView1.Rows[e.RowIndex];
try
{
if (dgr.Cells[ "列名 "].Value.ToString() == "比较值 ")
{
dgr.DefaultCellStyle.ForeColor = 设置的颜色;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
#3
哥们,我说了,判定列“abcd”并不在界面上显示。
所以,无法使用“if (dataGridView1.Rows[e.RowIndex].Cell["abcd"].Value=="Text1")”这样的判断。
#4
你的意思是,把那列绑定到Grid上,然后设置Visible=false,是这个意思吧。
可是如果连绑定也不允许呢。
就是想通过数据源判断怎么做?
还有啊,Grid上显示的是通过主从关系绑定的内容,单纯靠行的索引值从数据源中取,好像也不行。
#5
你把那列掩藏不就可以了,,显不显示并没关系
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
try
{
if (dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString()=="2")
{
e.CellStyle.BackColor = Color.Red;
}
}
#6
这一列虽然不显示,但是你依然可以使用它的值啊,除了该列的Visible设为false以外,其他的没有任何区别
#7
我明白了,就是说没什么办法从数据源中取数据了,只能绑定到Grid上,然后设置其Visible=false这一招了。
#8
如果是 DataSource 赋值的,在 RowPrePaint 事件里转换 DataSource 取出不显示列的值
#9
不好意思,不太明白。
“在 RowPrePaint 事件里转换 DataSource 取出不显示列的值”
这里指的是把谁转换成DataSource?
#10
假如里赋值是一个 DataTable,可以在 RowsAdded 事件中处理
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
DataTable dtbl = (DataTable)dataGridView1.DataSource;
for (int i = e.RowIndex; i < e.RowIndex + e.RowCount; i++)
{
DataGridViewRow dgvrw = dataGridView1.Rows[i];
DataRow drw = dtbl.Rows[i];
dgvrw.DefaultCellStyle.BackColor = 根据 drw 中某一列的值设置颜色;
}
}
#11
问题已经解决:
for (int i = 0; i < mainGrid.Rows.Count; i++)
{
DataRow row = (mainGrid.Rows[i].DataBoundItem as DataRowView).Row;
if (row == null)
return;
....
}
for (int i = 0; i < mainGrid.Rows.Count; i++)
{
DataRow row = (mainGrid.Rows[i].DataBoundItem as DataRowView).Row;
if (row == null)
return;
....
}
#12
支持楼上大侠的呢
支持
支持