Hervorheben der Datagridview-ZeilenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Hervorheben der Datagridview-Zeilen

Post by Anonymous »

Ich habe eine Datagrid-Ansicht in meiner Winforms-App mit .NET 8. Ich möchte einige Zeilen basierend auf der aktuellen Benutzerrolle und der Anforderung nextlevel hervorheben. Ich schreibe diese Funktion und rufe sie beim Laden des Formulars auf.
Aber am Ende sind alle Zeilen weiß. Ich bin mir über den Benutzerrollenwert (1, int32) und den Nextlevel-Wert sicher.

Code: Select all

private void LoadPendingRequests()
{
DataTable dt = new DataTable();

using (SqlConnection con = new SqlConnection(connectionDB))
{
con.Open();

// 1. Fetch requests with next pending level
string query = @"SELECT r.RequestID, r.CreatedDate,
u.FullName AS Requestor, r.Status,
(SELECT MIN([Level])
FROM Approvals a
WHERE a.RequestID = r.RequestID
AND a.Status = 'Pending') AS NextLevel
FROM Requests r
JOIN Users u ON r.RequestorID = u.UserID
WHERE r.Status = 'Pending'";

SqlDataAdapter da = new SqlDataAdapter(query, con);
da.Fill(dt);

// 2. Bind DataGridView
dgvRequests.DataSource = dt;
dgvRequests.AllowUserToAddRows = false; // prevent new row
dgvRequests.Refresh();

// 3. Check column exists
if (!dgvRequests.Columns.Contains("NextLevel"))
{
MessageBox.Show("NextLevel column not found!");
return;
}

int nextLevelIndex = dgvRequests.Columns["NextLevel"].Index;

// 4. Highlight rows using UserSession.ApprovalLevels
foreach (DataGridViewRow row in dgvRequests.Rows)
{
if (row.IsNewRow)
continue;

row.DefaultCellStyle.BackColor = Color.White;

object cellValue = row.Cells[nextLevelIndex].Value;

if (cellValue != null && cellValue != DBNull.Value)
{
int nextLevel = Convert.ToInt32(cellValue);

// Highlight if user can approve this level
if (UserSession.ApprovalLevels.Contains(nextLevel))
{
row.DefaultCellStyle.BackColor = Color.LightGreen;
}

System.Diagnostics.Debug.WriteLine($"NextLevel={nextLevel}, Highlight={UserSession.ApprovalLevels.Contains(nextLevel)}");
}
}

dgvRequests.Refresh();
}
}
Ich bin sicher, dass die Ebene wahr ist und in der Datagrid-Ansicht Daten mit dieser Ebene vorhanden sind:
Image

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post