Phong cách mặc định cho các tiêu đề hàng nên đã được định nghĩa khi bạn xây dựng DataGridView
của bạn. Vì vậy, tôi sẽ sử dụng:
if (/*I want to change this row */)
{
DataGridViewCellStyle rowStyle; // = Grid.RowHeadersDefaultCellStyle;
rowStyle = Grid.Rows[i].HeaderCell.Style;
rowStyle.BackColor = Color.Wheat;
Grid.Rows[i].HeaderCell.Style = rowStyle;
}
Bằng cách này bạn điền rowStyle
theo kiểu được xác định trước và sau đó chỉ thay đổi phần bạn muốn thay đổi. Xem nếu điều này giải quyết vấn đề của bạn.
// EDIT Khi bạn muốn giữ các kiểu dáng khác của Windows DataGridView mặc định, bạn cũng sẽ cần phải đặt thêm các thông số khác của kiểu. Xem this post.
Hoặc thử cách này. Khi initialiazing:
dataGridView1.CellPainting +=
new DataGridViewCellPaintingEventHandler (dataGridView_CellPainting);
Sau đó, tạo ra các chức năng xử lý với một cái gì đó như:
void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
DataGridView dv = sender as DataGridView;
DataGridViewCellStyle rowStyle;// = dv.RowHeadersDefaultCellStyle;
if (e.ColumnIndex == -1)
{
e.PaintBackground(e.CellBounds, true);
e.Handled = true;
if (/*I want to change this row */)
{
rowStyle = dv.Rows[e.RowIndex].HeaderCell.Style;
rowStyle.BackColor = Color.Wheat;
dv.Rows[e.RowIndex].HeaderCell.Style = rowStyle;
using (Brush gridBrush = new SolidBrush(Color.Wheat))
{
using (Brush backColorBrush = new SolidBrush(e.CellStyle.BackColor))
{
using (Pen gridLinePen = new Pen(gridBrush))
{
// Clear cell
e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
//Bottom line drawing
e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right, e.CellBounds.Bottom - 1);
// here you force paint of content
e.PaintContent(e.ClipBounds);
e.Handled = true;
}
}
}
}
}
}
Mã này được dựa trên this post. chỉ Sau đó bạn sẽ cần phải tạo điều kiện hơn cho sơn mouseover và nhà nước lựa chọn. Nhưng điều này sẽ làm việc cho bạn.
Hãy nhớ xóa: Grid.EnableHeadersVisualStyles = false;
hoặc ép buộc: Grid.EnableHeadersVisualStyles = true;
.
Vấn đề là chuyển Grid.EnableHeadersVisualStyles thành false. Các tiêu đề hàng thay đổi thành màu, nhưng tiêu đề cột bằng phẳng và không giống như tiêu đề của Grid.EnableHeadersVisualStyles thành true. Ive đã thử ý tưởng của bạn cho các cột (nhận và đặt lại phong cách) nhưng nó không hoạt động ... Tôi sẽ đăng hình ảnh của những gì tôi đang nói về – Tizz
Tôi hiểu rõ hơn những gì bạn đang nói về bây giờ, với những hình ảnh. Hmm. Điều này có thể không thực hiện được. – CaptainBli
Bạn có thể sửa đổi một hàng riêng lẻ bằng cách sử dụng trình xử lý 'paint'. – CaptainBli