根据某些条件更改datagridview行颜色。 [英] Change datagridview row colour based on some condition.
问题描述
我有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屋!