积极答复者
listview可否让某个单元格的背景色不一样

问题
-
我是从文本文件中读回来一段历史记录,历史记录分别存储了报警跟报警后恢复正常的两种状态,所以我想如果这条记录是报警的,那么我就想让报警这一格变为红色或者整个背景为红色。我刚才用 lvi.SubItems[5].BackColor = Color.Red;可是没有改变颜色。
private void Treefile_AfterSelect(object sender, TreeViewEventArgs e)
{
string filepath,strline;
int i=1;
string[] splitstr;
if (Treefile.SelectedNode.Level < 2) return;
filepath= Treefile.SelectedNode.FullPath;
strline = "";
StreamReader sr = new StreamReader(Application.StartupPath + "\\"+filepath);
LV.Items.Clear();
while (strline != null)
{
strline = sr.ReadLine();
if (strline != null)
{
ListViewItem lvi = new ListViewItem();
lvi.SubItems.Clear();
lvi.SubItems[0].Text=i.ToString();
i++;
splitstr=strline.Split('\t');
lvi.SubItems.Add(splitstr[0].ToString());
lvi.SubItems.Add(splitstr[1].ToString());
lvi.SubItems.Add(splitstr[2].ToString());
lvi.SubItems.Add(splitstr[3].ToString());
lvi.SubItems.Add(splitstr[4].ToString());
if (splitstr[4].ToString() == "报警")
{
lvi.SubItems[5].BackColor = Color.Red;
}
else
{
lvi.SubItems[5].BackColor = Color.Green;
}
LV.Items.Add(lvi);}
}
sr.Close();
}
can you help me?- 已编辑 西門吹水 2010年5月24日 9:09 修改
答案
-
试了一下,只有 ListViewItem 上的 BackColor 设置是有效的,SubItems 上的 BackColor 以及 ForeColor 设置无效。
如果确实需要加亮一栏,而不是一行,请设置 DrawMode 为 OwnerDraw 然后用 GDI+ 自己画。这个会比较麻烦的。
Mark Zhou- 已标记为答案 KeFang Chen 2010年5月26日 3:14
-
-
我采用了,整行变色来表示了,如含A相字样采用了雪白色,含B相字样采用的浅橙色,含C相字样采用的天蓝色。但是结果出来之后个人感觉比较花。但看起来还是比较顺眼。
for (int j = 0; j < LV.Items.Count; j++)
{
if (LV.Items[j].SubItems[1].Text.IndexOf("A") != -1)
{
LV.Items[j].BackColor = Color.Snow;
}
else if (LV.Items[j].SubItems[1].Text.IndexOf("B") != -1)
{
LV.Items[j].BackColor = Color.Salmon;
}
else if (LV.Items[j].SubItems[1].Text.IndexOf("C") != -1)
{
LV.Items[j].BackColor = Color.SkyBlue;
}
}
can you help me?- 已标记为答案 KeFang Chen 2010年5月26日 3:14
全部回复
-
试了一下,只有 ListViewItem 上的 BackColor 设置是有效的,SubItems 上的 BackColor 以及 ForeColor 设置无效。
如果确实需要加亮一栏,而不是一行,请设置 DrawMode 为 OwnerDraw 然后用 GDI+ 自己画。这个会比较麻烦的。
Mark Zhou- 已标记为答案 KeFang Chen 2010年5月26日 3:14
-
-
我采用了,整行变色来表示了,如含A相字样采用了雪白色,含B相字样采用的浅橙色,含C相字样采用的天蓝色。但是结果出来之后个人感觉比较花。但看起来还是比较顺眼。
for (int j = 0; j < LV.Items.Count; j++)
{
if (LV.Items[j].SubItems[1].Text.IndexOf("A") != -1)
{
LV.Items[j].BackColor = Color.Snow;
}
else if (LV.Items[j].SubItems[1].Text.IndexOf("B") != -1)
{
LV.Items[j].BackColor = Color.Salmon;
}
else if (LV.Items[j].SubItems[1].Text.IndexOf("C") != -1)
{
LV.Items[j].BackColor = Color.SkyBlue;
}
}
can you help me?- 已标记为答案 KeFang Chen 2010年5月26日 3:14