ListView控件中的图标问题

Jon 2007-07-27 04:23:06
程序目标:
先从数据库中读取员工信息,将其填充到ListView控件中供人流览,根据员工性别字段的不同,男性一种图标,女性一种图标,在同一个ListView中显示
主要代码如下:
DataTable tbl = TransData.GetDataTable("Select em_id,em_name,em_sex,em_group,em_mobile from Employees order by em_id");
ltvEmployee.Items.Clear();
for (int i = 0; i < tbl.Rows.Count; i++)
{
ltvEmployee.Items.Add(tbl.Rows[i]["em_id"].ToString());
ltvEmployee.Items[i].SubItems.Add(tbl.Rows[i]["em_name"].ToString());
ltvEmployee.Items[i].SubItems.Add(tbl.Rows[i]["em_sex"].ToString());
ltvEmployee.Items[i].SubItems.Add(tbl.Rows[i]["em_group"].ToString());
ltvEmployee.Items[i].SubItems.Add(tbl.Rows[i]["em_mobile"].ToString());
if (ltvEmployee.Items[i].SubItems[2].Text == "男") ltvEmployee.Items[i].ImageIndex = 2;
else ltvEmployee.Items[i].ImageIndex = 3;
}
问题:将数据填充到ListView控件后,始终只显示一种图标,即女性的那种图标(ImageIndex为3),不知道怎样解决这个问题,求高手指教!谢谢!
...全文
301 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
spy7 2007-08-30
  • 打赏
  • 举报
回复
ListView3.StateImageList = ImageList1
Dim xh As Integer = ListView3.Items.Count
ListView3.Items.Add("uu", 1)
Me.ListView3.Items.Insert(xh, New ListViewItem(New String() {(xh + 1).ToString, "", "", "", "", ""}))
ListView3.Items(0).ImageIndex = 0
Jon 2007-07-31
  • 打赏
  • 举报
回复
Mingle_Qin(sdfsdf),应该是2,ListView的Subitems的序列是从1开始算的
Jon 2007-07-31
  • 打赏
  • 举报
回复
sowenxiong(Sowen),你的代码确实没有错,我的郁闷就是在这里,找不出错的地方来
Jon 2007-07-31
  • 打赏
  • 举报
回复
SqlConnection cn = new SqlConnection("Data Source = localhost;User ID = sa;Password = pp;DATABASE = db");
cn.Open();
SqlCommand cmd = new SqlCommand("Select wo_id,wo_state from Working",cn);
DataTable tbl = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(tbl);
for (int i = 0; i < tbl.Rows.Count; i++)
{
ListViewItem lvi = new ListViewItem();
switch (tbl.Rows[i]["wo_state"].ToString())
{
case "完成":
lvi.ForeColor = Color.Red;
break;
case "开始":
lvi.ForeColor = Color.Green;
break;
case "待工":
lvi.ForeColor = Color.Blue;
break;
default:
break;
}
lvi.Text = tbl.Rows[i]["wo_id"].ToString();
ltv1.Items.Add(lvi);
}
这样写应该没错吧,就是不行,列出来的几个Item全是黑色的字。
但是这么写又可以:
for (int i = 0; i < 10; i++)
{
ListViewItem lvi = new ListViewItem();
switch (i % 3)
{
case 0:
lvi.ForeColor = Color.Red;
break;
case 1:
lvi.ForeColor = Color.Blue;
break;
case 2:
lvi.ForeColor = Color.Green;
break;
default:
break;
}
lvi.Text = i.ToString();
ListView1.Items.Add(lvi);
}
我快疯了,谁能帮帮我!?
Mingle_Qin 2007-07-31
  • 打赏
  • 举报
回复
if (ltvEmployee.Items[i].SubItems[2].Text == "男") ltvEmployee.Items[i].ImageIndex = 2;
else ltvEmployee.Items[i].ImageIndex = 3;

----------------------------

这句出问题.

SEX的项应该是1吧.SubItems[1].Text == "男"
sowenxiong 2007-07-31
  • 打赏
  • 举报
回复
上面的代码我N年都是这么写的,绝对没有问题。
你自己好好检查一下其他代码吧!
Jon 2007-07-30
  • 打赏
  • 举报
回复
可以啊
sowenxiong 2007-07-30
  • 打赏
  • 举报
回复
那你就试试拉一个ListView 到窗体上
然后添加两个Item一个男一个女选中设置好ImageIndex看看能不能呈现。
Jon 2007-07-30
  • 打赏
  • 举报
回复
还是不行,我的IDE有问题?
sowenxiong 2007-07-27
  • 打赏
  • 举报
回复
foreach(DataRow dr in tbl.Rows)
{
ListViewItem item = new ListViewItem();
item.text = dr["em_id"].ToString();
item.SubItems.Add(dr["em_sex"].ToString());
...
if(dr["em_sex"].ToString() == "男")
{
item.ImageIndex = 2;
}
else
{
item.ImageIndex = 3;
}
ltvEmployee.Items.Add(item);
}

还有确认一下你的ltvEmployee.ImageList 是否绑定了ImageList
Jon 2007-07-27
  • 打赏
  • 举报
回复
没人告诉我吗?自己顶上去!!!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧