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();
}
}

Mobile version