2010-08-25 58 views
12

Làm thế nào tôi có thể thay đổi màu sau của một ô trong chế độ xem danh sách bằng cách sử dụng giá trị riêng của nó?Làm thế nào để thay đổi màu nền của một phân mục listview bằng giá trị riêng của nó

alt text

Các giá trị trong cột ColorFlag Đến từ cơ sở dữ liệu.

Đây là mã của tôi:

foreach(DataRow dr in _dataTbl.Rows) 
     { 
      _markOW = dr["Mark"].ToString(); 
      _stock = dr["Stock"].ToString(); 
      _SteelSectio = dr["SteelSection"].ToString(); 
      _colo = (Int32)dr["Color"]; 


      ListViewItem _lvi = new ListViewItem(_markOW); 
      _lvi.SubItems.AddRange(new string[]{_SteelSectio, _stock,  _colo.ToString()}); 

      _myListView.Items.Add(_lvi); } 

Dưới đây là đoạn code mà tôi đã cố gắng để thay đổi backcolor của các tế bào:

for (int _i = 0; _i < _owLV.Items.Count; _i++) 
      { 
       _myListView.Items[_i].UseItemStyleForSubItems = false; 
       _myListView.Items[_i].SubItems[3].BackColor = Color.FromArgb(_colo); 
      } 

Cảm ơn trước

+0

Tại sao bạn không sử dụng DataGridView? – siride

+0

Tôi chưa biết cách sử dụng DataGridView. – Rye

+0

Vâng, đây có thể là thời điểm tốt để học. Nó thực sự không phải là khó khăn và các công cụ thiết kế trực quan để thiết lập một GridView đơn giản là khá đơn giản. Tôi nghĩ thời gian của bạn sẽ tốt hơn nếu bạn học được điều đó hơn là chiến đấu với ListView để làm cho nó làm những gì nó không thực sự được thiết kế để làm. – siride

Trả lời

29

Theo như tôi có thể nói, mã bạn có có vẻ ổn. Tôi chỉ cần ném một ứng dụng Windows Forms nhanh chóng và ném một ListView vào biểu mẫu với hai cột ở dạng xem chi tiết. Mã sau hoạt động tốt.

var item1 = new ListViewItem("Item 1"); 
item1.SubItems.Add("Color"); 
item1.SubItems[1].BackColor = Color.FromArgb(-16711936); 
item1.UseItemStyleForSubItems = false; 

listView1.Items.Add(item1); 

Tôi sẽ thử đặt BackColor trước khi bạn thêm mục. Nó cũng giống như bạn đang thiết lập tất cả các mục để cùng một màu sắc mà có lẽ không phải là những gì bạn muốn.

+0

Vâng, đó là vấn đề của tôi. – Rye

+0

OK! Cảm ơn bạn. – Rye

+0

Wow, Làm việc tốt .. cảm ơn. –

5

Hãy nhìn vào các liên kết này:

C# ListView Detail, Highlight a single cell

Changing color of list view cell using C# (có một giải pháp làm việc)

Điểm mấu chốt là để thiết lập này:

listView1.Items[0].UseItemStyleForSubItems = false; 

Làm điều này:

foreach (DataRow dr in _dataTbl.Rows) 
{ 
    _markOW = dr["Mark"].ToString(); 
    _stock = dr["Stock"].ToString(); 
    _SteelSectio = dr["SteelSection"].ToString(); 
    _color = (Int32)dr["Color"]; 

    ListViewItem _lvi = new ListViewItem(_markOW); 

    _lvi.SubItems.AddRange(new string[] {_SteelSectio, _stock, _color.ToString() });  
    _lvi.UseItemStyleForSubItems = false; 
    _lvi.SubItems[2].BackColor = Color.FromArgb(_color); 

    _myListView.Items.Add(_lvi); 
} 
+0

Liên kết thứ hai bạn đã đăng là liên kết tôi đã sử dụng cách đây một thời gian. Nhưng vấn đề với điều đó, là giá trị cuối cùng được đặt trong biến _colo sẽ là màu sau của cột. – Rye

+1

@Rye đó là bởi vì bạn đang đặt chúng tất cả cùng màu, _colo. Hãy xem ví dụ của tôi và ghi chú của tôi ở cuối. Bạn nên đặt BackColor trước khi thêm mục. – Josh

+0

OK. Cảm ơn bạn. – Rye

Các vấn đề liên quan