C# winform datagridview中背景色问题

时间:2022-12-09 14:50:03
datagridview当前绑定的数据中有一列是int类型,我想让这一列中所有值小于10的所对应的行的背景色变为红色,请问该如何实现

29 个解决方案

#1


查出那列的所有值,然后,改变背景色

#2


假如Cells[0]即第一列是你所说的那列

        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                if (Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value) == 1)
                    e.CellStyle.BackColor = Color.Red;
                else if (Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value) == 2)
                    e.CellStyle.BackColor = Color.Green;
                else
                    e.CellStyle.BackColor = Color.Blue;
            }
        }

#3


先判断,找到行
 this.dataGridView1.Rows[0].DefaultCellStyle.ForeColor=Color.Red;

#4


引用 2 楼 bdmh 的回复:
假如Cells[0]即第一列是你所说的那列

C# code

        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.RowIndex > -1)
            {
……
我想要改变的是值小于10 所对应的那一行的颜色,而不是整个dataGridView

#5


引用 3 楼 chinajiyong 的回复:
先判断,找到行
 this.dataGridView1.Rows[0].DefaultCellStyle.ForeColor=Color.Red;
现在的问题就是我不知道该怎么去找那就小于10的所对应的行!!

#6


 for (int m = 0; m < dgv2.Rows.Count; m++)
                    {
                        if (dgv1.Rows[j].Cells["UserName"].Value.ToString().Contains("Allen"))
                        {
                            dgv1.Rows[j].DefaultCellStyle.BackColor = Color.Green;
                        }
                    }

#7


 if (Convert.ToInt32(dgv1.Rows[j].Cells["WTITMN"].Value.ToString()) < 10) 
                        {
                            dgv1.Rows[j].DefaultCellStyle.BackColor = Color.Red;
                        }

#8


引用 5 楼 liujin9012 的回复:
引用 3 楼 chinajiyong 的回复:
先判断,找到行
this.dataGridView1.Rows[0].DefaultCellStyle.ForeColor=Color.Red;
现在的问题就是我不知道该怎么去找那就小于10的所对应的行!!

只有遍历那一列字段,判断小于10

#9


这个最好理解也最简单。
引用 2 楼 bdmh 的回复:
假如Cells[0]即第一列是你所说的那列
C# code

        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.RowIndex > -1)
            {
     ……

#10


引用 6 楼 chenpeng0118 的回复:
for (int m = 0; m < dgv2.Rows.Count; m++)
  {
  if (dgv1.Rows[j].Cells["UserName"].Value.ToString().Contains("Allen"))
  {
  dgv1.Rows[j].DefaultCellStyle.BackColor = Color.Green;
  }
  }
这个有点看不懂!

#11


for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
                {
                    if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
                        dgv_Stocks.Rows[i].DefaultCellStyle.BackColor = Color.Red;
                }
这样写也报错!未将对象引用设置到对象的实例。

#12


引用 11 楼 liujin9012 的回复:
for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
                {
                    if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
                        dgv_Stock……

不要等号,试试

for (int i = 0; i <dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
  dgv_Stocks.Rows[i].DefaultCellStyle.BackColor = Color.Red;
  }

#13


引用 11 楼 liujin9012 的回复:
for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
  dgv_Stocks.Rows[i].DefaultCellStyle.BackColor = Color.Red;
  }
……


那就是没取到值啊,你看看你的下标是多少?有没有剩余数量那一列,剩余数量是数据库查出来的字段,别搞错了。

#14


引用 12 楼 chinajiyong 的回复:
引用 11 楼 liujin9012 的回复:

for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
  dgv_Stock……

不要等号,试试

C# code

……
不是等号的问题 试过了。
Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) 未将对象引用设置到对象的实例

#15


这跟等号有什么关系?你前面那句话都没取到值,怎么等于?



dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()这句话我我这里写的,你要改为你那里的实际变量和参数,不要复制我的代码进去。

#16


引用 13 楼 chenpeng0118 的回复:
引用 11 楼 liujin9012 的回复:
for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
  dgv_Stocks.Rows[i].DefaultCellStyle.Bac……
这个没错。这是绑定代码
ocmd.CommandText = "select MaterielRegiser_Number as 货料编号,MaterielRegiser_Name as 货料名称,MaterielRegiser_Model as 规格型号,MaterielRegiser_Unit as 单位,MaterielRegiser_Total as 剩余数量 from MIS_MaterielRegiser";
                DataSet ds = new DataSet();
                oda = new OleDbDataAdapter(ocmd);

                oda.Fill(ds);
                this.dgv_Stocks.DataSource=ds.Tables[0];

#17


引用 15 楼 chenpeng0118 的回复:
这跟等号有什么关系?你前面那句话都没取到值,怎么等于?



dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()这句话我我这里写的,你要改为你那里的实际变量和参数,不要复制我的代码进去。
 for (int i = 0; i < dgv_Stocks.Rows.Count; i++)改过了啊。i代表所有列

#18


那个 dgv_Stocks 是我程序里面的代码,你的程序里面也是这么命名的????????

#19


引用 18 楼 chenpeng0118 的回复:
那个 dgv_Stocks 是我程序里面的代码,你的程序里面也是这么命名的????????
这个一直都是我写的好吧。你最初给的是dgv1

#20


哦,我搞混了,不好意思,你要看看你那个“剩余数量”有没有?

我写个最简单的例子给你,你复制过去试试看:

    private void DataGridView1_CellFormatting_1(object sender, DataGridViewCellFormattingEventArgs e)
        {
            try
            {
                if (e != null && e.RowIndex > -1)
                {
                    DataGridViewRow dr = this.DataGridView1.Rows[e.RowIndex];
                    string dateStr = dr.Cells[6].Value.ToString();

                    string nowdata = DateTime.Now.ToString("yyyy年M月dd日");
                    if (dateStr == nowdata)
                    {
                        dr.DefaultCellStyle.BackColor = Color.Red;
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            
        }

#21


引用 14 楼 liujin9012 的回复:
引用 12 楼 chinajiyong 的回复:
引用 11 楼 liujin9012 的回复:

for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
  dgv_Stock………

首先把AllowUserToAddRows属性设置为false
再用下面代码

  for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (Convert.ToInt32(dataGridView1.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
                    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red;
            }

#22


引用 20 楼 chenpeng0118 的回复:
哦,我搞混了,不好意思,你要看看你那个“剩余数量”有没有?

我写个最简单的例子给你,你复制过去试试看:

  private void DataGridView1_CellFormatting_1(object sender, DataGridViewCellFormattingEventArgs e)
  {
  try
  {
  if (e != null &amp;&am……
我把你给的索引值改了还是一样的。未将对象引用设置到对象的实例

#23


引用 22 楼 liujin9012 的回复:
引用 20 楼 chenpeng0118 的回复:
哦,我搞混了,不好意思,你要看看你那个“剩余数量”有没有?

我写个最简单的例子给你,你复制过去试试看:

private void DataGridView1_CellFormatting_1(object sender, DataGridViewCellFormattingEventArgs e)
{
try
{
if (……

已经搞定了,首先把AllowUserToAddRows属性设置为false,

            dataGridView1.ClearSelection();
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (Convert.ToInt32(dataGridView1.Rows[i].Cells["column2"].Value.ToString()) < 10)
                {

                    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red;

                }

            }

#24


引用 21 楼 chinajiyong 的回复:
引用 14 楼 liujin9012 的回复:

引用 12 楼 chinajiyong 的回复:
引用 11 楼 liujin9012 的回复:

for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToStr……
晕,一改果然好了。非常感谢

#25


非常感谢各位的热心帮助,谢谢大家!

#26


引用 24 楼 liujin9012 的回复:
引用 21 楼 chinajiyong 的回复:
引用 14 楼 liujin9012 的回复:

引用 12 楼 chinajiyong 的回复:
引用 11 楼 liujin9012 的回复:

for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i……

设置一下 dataGridView1.ClearSelection();因为有数据的话第一个单元格默认选择。这个是取消掉默认选择

#27


我草,这么邪门儿?怎么可能呢???
你看这张图片,我不知怎么样可以贴到这里,我放在空间里面。
http://hi.csdn.net/space-300592-do-album-picid-1087062.html

代码:
   private void dgv_model_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {

            if (e != null && e.RowIndex > -1)
            {
                DataGridViewRow dr = this.dgv_model.Rows[e.RowIndex];
                string OldValue = dr.Cells[1].Value.ToString().Trim().ToUpper();

                string NewValue = "COAT";
                if (OldValue == NewValue)
                {
                    dr.DefaultCellStyle.BackColor = Color.Red;
                }
            }


        }

#28


第一:不要=,BASE 0  
第二:VALUE 为空时,不能使用value.tostring(),

#29


databind 的时候 判断一下吧 C# winform datagridview中背景色问题

#1


查出那列的所有值,然后,改变背景色

#2


假如Cells[0]即第一列是你所说的那列

        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                if (Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value) == 1)
                    e.CellStyle.BackColor = Color.Red;
                else if (Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value) == 2)
                    e.CellStyle.BackColor = Color.Green;
                else
                    e.CellStyle.BackColor = Color.Blue;
            }
        }

#3


先判断,找到行
 this.dataGridView1.Rows[0].DefaultCellStyle.ForeColor=Color.Red;

#4


引用 2 楼 bdmh 的回复:
假如Cells[0]即第一列是你所说的那列

C# code

        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.RowIndex > -1)
            {
……
我想要改变的是值小于10 所对应的那一行的颜色,而不是整个dataGridView

#5


引用 3 楼 chinajiyong 的回复:
先判断,找到行
 this.dataGridView1.Rows[0].DefaultCellStyle.ForeColor=Color.Red;
现在的问题就是我不知道该怎么去找那就小于10的所对应的行!!

#6


 for (int m = 0; m < dgv2.Rows.Count; m++)
                    {
                        if (dgv1.Rows[j].Cells["UserName"].Value.ToString().Contains("Allen"))
                        {
                            dgv1.Rows[j].DefaultCellStyle.BackColor = Color.Green;
                        }
                    }

#7


 if (Convert.ToInt32(dgv1.Rows[j].Cells["WTITMN"].Value.ToString()) < 10) 
                        {
                            dgv1.Rows[j].DefaultCellStyle.BackColor = Color.Red;
                        }

#8


引用 5 楼 liujin9012 的回复:
引用 3 楼 chinajiyong 的回复:
先判断,找到行
this.dataGridView1.Rows[0].DefaultCellStyle.ForeColor=Color.Red;
现在的问题就是我不知道该怎么去找那就小于10的所对应的行!!

只有遍历那一列字段,判断小于10

#9


这个最好理解也最简单。
引用 2 楼 bdmh 的回复:
假如Cells[0]即第一列是你所说的那列
C# code

        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.RowIndex > -1)
            {
     ……

#10


引用 6 楼 chenpeng0118 的回复:
for (int m = 0; m < dgv2.Rows.Count; m++)
  {
  if (dgv1.Rows[j].Cells["UserName"].Value.ToString().Contains("Allen"))
  {
  dgv1.Rows[j].DefaultCellStyle.BackColor = Color.Green;
  }
  }
这个有点看不懂!

#11


for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
                {
                    if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
                        dgv_Stocks.Rows[i].DefaultCellStyle.BackColor = Color.Red;
                }
这样写也报错!未将对象引用设置到对象的实例。

#12


引用 11 楼 liujin9012 的回复:
for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
                {
                    if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
                        dgv_Stock……

不要等号,试试

for (int i = 0; i <dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
  dgv_Stocks.Rows[i].DefaultCellStyle.BackColor = Color.Red;
  }

#13


引用 11 楼 liujin9012 的回复:
for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
  dgv_Stocks.Rows[i].DefaultCellStyle.BackColor = Color.Red;
  }
……


那就是没取到值啊,你看看你的下标是多少?有没有剩余数量那一列,剩余数量是数据库查出来的字段,别搞错了。

#14


引用 12 楼 chinajiyong 的回复:
引用 11 楼 liujin9012 的回复:

for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
  dgv_Stock……

不要等号,试试

C# code

……
不是等号的问题 试过了。
Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) 未将对象引用设置到对象的实例

#15


这跟等号有什么关系?你前面那句话都没取到值,怎么等于?



dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()这句话我我这里写的,你要改为你那里的实际变量和参数,不要复制我的代码进去。

#16


引用 13 楼 chenpeng0118 的回复:
引用 11 楼 liujin9012 的回复:
for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
  dgv_Stocks.Rows[i].DefaultCellStyle.Bac……
这个没错。这是绑定代码
ocmd.CommandText = "select MaterielRegiser_Number as 货料编号,MaterielRegiser_Name as 货料名称,MaterielRegiser_Model as 规格型号,MaterielRegiser_Unit as 单位,MaterielRegiser_Total as 剩余数量 from MIS_MaterielRegiser";
                DataSet ds = new DataSet();
                oda = new OleDbDataAdapter(ocmd);

                oda.Fill(ds);
                this.dgv_Stocks.DataSource=ds.Tables[0];

#17


引用 15 楼 chenpeng0118 的回复:
这跟等号有什么关系?你前面那句话都没取到值,怎么等于?



dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()这句话我我这里写的,你要改为你那里的实际变量和参数,不要复制我的代码进去。
 for (int i = 0; i < dgv_Stocks.Rows.Count; i++)改过了啊。i代表所有列

#18


那个 dgv_Stocks 是我程序里面的代码,你的程序里面也是这么命名的????????

#19


引用 18 楼 chenpeng0118 的回复:
那个 dgv_Stocks 是我程序里面的代码,你的程序里面也是这么命名的????????
这个一直都是我写的好吧。你最初给的是dgv1

#20


哦,我搞混了,不好意思,你要看看你那个“剩余数量”有没有?

我写个最简单的例子给你,你复制过去试试看:

    private void DataGridView1_CellFormatting_1(object sender, DataGridViewCellFormattingEventArgs e)
        {
            try
            {
                if (e != null && e.RowIndex > -1)
                {
                    DataGridViewRow dr = this.DataGridView1.Rows[e.RowIndex];
                    string dateStr = dr.Cells[6].Value.ToString();

                    string nowdata = DateTime.Now.ToString("yyyy年M月dd日");
                    if (dateStr == nowdata)
                    {
                        dr.DefaultCellStyle.BackColor = Color.Red;
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            
        }

#21


引用 14 楼 liujin9012 的回复:
引用 12 楼 chinajiyong 的回复:
引用 11 楼 liujin9012 的回复:

for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
  dgv_Stock………

首先把AllowUserToAddRows属性设置为false
再用下面代码

  for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (Convert.ToInt32(dataGridView1.Rows[i].Cells["剩余数量"].Value.ToString()) < 10)
                    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red;
            }

#22


引用 20 楼 chenpeng0118 的回复:
哦,我搞混了,不好意思,你要看看你那个“剩余数量”有没有?

我写个最简单的例子给你,你复制过去试试看:

  private void DataGridView1_CellFormatting_1(object sender, DataGridViewCellFormattingEventArgs e)
  {
  try
  {
  if (e != null &amp;&am……
我把你给的索引值改了还是一样的。未将对象引用设置到对象的实例

#23


引用 22 楼 liujin9012 的回复:
引用 20 楼 chenpeng0118 的回复:
哦,我搞混了,不好意思,你要看看你那个“剩余数量”有没有?

我写个最简单的例子给你,你复制过去试试看:

private void DataGridView1_CellFormatting_1(object sender, DataGridViewCellFormattingEventArgs e)
{
try
{
if (……

已经搞定了,首先把AllowUserToAddRows属性设置为false,

            dataGridView1.ClearSelection();
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (Convert.ToInt32(dataGridView1.Rows[i].Cells["column2"].Value.ToString()) < 10)
                {

                    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red;

                }

            }

#24


引用 21 楼 chinajiyong 的回复:
引用 14 楼 liujin9012 的回复:

引用 12 楼 chinajiyong 的回复:
引用 11 楼 liujin9012 的回复:

for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i].Cells["剩余数量"].Value.ToStr……
晕,一改果然好了。非常感谢

#25


非常感谢各位的热心帮助,谢谢大家!

#26


引用 24 楼 liujin9012 的回复:
引用 21 楼 chinajiyong 的回复:
引用 14 楼 liujin9012 的回复:

引用 12 楼 chinajiyong 的回复:
引用 11 楼 liujin9012 的回复:

for (int i = 0; i <=dgv_Stocks.Rows.Count; i++)
  {
  if (Convert.ToInt32(dgv_Stocks.Rows[i……

设置一下 dataGridView1.ClearSelection();因为有数据的话第一个单元格默认选择。这个是取消掉默认选择

#27


我草,这么邪门儿?怎么可能呢???
你看这张图片,我不知怎么样可以贴到这里,我放在空间里面。
http://hi.csdn.net/space-300592-do-album-picid-1087062.html

代码:
   private void dgv_model_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {

            if (e != null && e.RowIndex > -1)
            {
                DataGridViewRow dr = this.dgv_model.Rows[e.RowIndex];
                string OldValue = dr.Cells[1].Value.ToString().Trim().ToUpper();

                string NewValue = "COAT";
                if (OldValue == NewValue)
                {
                    dr.DefaultCellStyle.BackColor = Color.Red;
                }
            }


        }

#28


第一:不要=,BASE 0  
第二:VALUE 为空时,不能使用value.tostring(),

#29


databind 的时候 判断一下吧 C# winform datagridview中背景色问题