根据某些条件更改datagridview行颜色。 [英] Change datagridview row colour based on some condition.

查看:70
本文介绍了根据某些条件更改datagridview行颜色。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有datagridview,其中填充了3列partno,locality,houseno。最初我的行颜色会说浅蓝色。现在我想要的是每当houseno在行中改变时,它的行颜色应该改为灰色。这意味着每当houseno改变时,这两种颜色应该交替应用于网格行。

例如,将在houseno列中填充的值将是

0

0

1

1

2

等等现在有了houseno 0的行将行颜色设置为浅蓝色,因为houseno 1将具有行颜色灰色,而houseno 2将再次呈浅蓝色等等。

可以任意1帮助我。

在此先感谢。

I have datagridview which is populated with 3 columns partno,locality,houseno. Initially my row colour would be say light blue. Now what i want is whenever houseno changes in row,its row colour should be changed to say grey. That means whenever houseno changes,these two colours should be alternately applied to rows of grid.
For example,values that would be populated in houseno column will be
0
0
1
1
2
etc.Now for row with houseno 0 will have row colour as light blue ,for houseno 1 will have row colour grey,for houseno 2 again light blue and so on.
Can any1 help me with this.
Thanks in advance.

推荐答案

没有符合您需求的直接方法。你需要添加



订阅RowAdded事件例如

There is no direct method that matches your need. You need to add

subscribe the RowAdded event e.g
Color prevBackColor = Color.LightBlue; // Member variable
string prevHouseNumber = string.Empty; // member variable

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
  if (e.RowIndex != -1)
  {
       string houseNumber = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[HOUSE_NUM_COLUMN_INDEX].Value);
 
      if(prevHouseNumber.Length != 0 && houseNumber != prevHouseNumber)
      {
         //set the alternate color
         if( prevBackColor == Color.Gray)
         {
           prevBackColor = Color.LightBlue; 
         } else if ( prevBackColor == Color.LightBlue)
         {
           prevBackColor = Color.Gray;
         }
         prevHouseNumber = houseNumber;        
      }

      dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = prevBackColor;

   }
}


如果您的行由HouseNumber订购,那么此代码可以帮助您

If your Rows are Ordered by HouseNumber then this Code Help you
Private Sub FormatGrid()
Dim j as Integer = -1
Dim Colr As Color
'Here I assume that HouseNumber available in Cell (0) (i.e., First Column)
For i = 0 To DataGridView1.RowCount - 1
    If DataGridView1.Rows(i).Cells(0).Value <> j Then
        j = DataGridView1.Rows(i).Cells(0).Value
        Select Case Colr
        Case Gray: Colr = LightBlue
        Case LightBlue: Colr = Gray
        End Select      
    End If
    DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color  
Next
End Sub


在DataGridView的DataBindingComplete事件中添加以下代码:





private void dgvListData_DataBindingComplete(object sender,DataGridViewBindingCompleteEventArgs e)

{

Color firstColor = Color.White,secondColor = ColorTranslator.FromHtml(#C8DFF1),prevBackColor = ColorTranslator.FromHtml(#C8DFF1); //成员变量

string prevVoucherNumber = string.Empty; //会员变量



foreach(dgvListData.Rows中的DataGridViewRow dRow)

{

#region<根据凭证号给出替代行颜色>

if(dRow.Index!= -1)

{

string voucherNumber = Convert .ToInt32(dgvListData.Rows [dRow.Index] .Cells [Voucher_No_With_Prefix]。Value).ToString();



if(prevVoucherNumber.Length == 0 || voucherNumber!= prevVoucherNumber)

{

//设置备用颜色

if(prevBackColor == firstColor)// firstColor

{

prevBackColor = secondColor; // secondColor

}

else if(prevBackColor == secondColor)// secondColor

{

prevBackColor = firstColor; // firstColor

}

prevVoucherNumber = voucherNumber;

}



dgvListData .Rows [dRow.Index] .DefaultCellStyle.BackColor = prevBackColor;



}

#endregion

}

}
Add below code in DataGridView's DataBindingComplete event:


private void dgvListData_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
Color firstColor = Color.White, secondColor = ColorTranslator.FromHtml("#C8DFF1"), prevBackColor = ColorTranslator.FromHtml("#C8DFF1"); // Member variable
string prevVoucherNumber = string.Empty; // Member variable

foreach (DataGridViewRow dRow in dgvListData.Rows)
{
#region < To give alternate row color based on Voucher No >
if (dRow.Index != -1)
{
string voucherNumber = Convert.ToInt32(dgvListData.Rows[dRow.Index].Cells["Voucher_No_With_Prefix"].Value).ToString();

if (prevVoucherNumber.Length == 0 || voucherNumber != prevVoucherNumber)
{
//set the alternate color
if (prevBackColor == firstColor) // firstColor
{
prevBackColor = secondColor; // secondColor
}
else if (prevBackColor == secondColor) // secondColor
{
prevBackColor = firstColor; // firstColor
}
prevVoucherNumber = voucherNumber;
}

dgvListData.Rows[dRow.Index].DefaultCellStyle.BackColor = prevBackColor;

}
#endregion
}
}


这篇关于根据某些条件更改datagridview行颜色。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆