У меня есть представление datagridview в моем приложении Winforms с .NET 8. Я хочу выделить некоторые строки на основе текущей роли пользователя и запроса следующего уровня. Я пишу эту функцию и вызываю ее в форме load.
Но в конце все строки белые. Я уверен насчет значения роли пользователя (1, int32) и значения следующего уровня.
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();
}
}
Я уверен, что уровень верен и в datagridview есть данные с этим уровнем:
У меня есть представление datagridview в моем приложении Winforms с .NET 8. Я хочу выделить некоторые строки на основе текущей роли пользователя и запроса следующего уровня. Я пишу эту функцию и вызываю ее в форме load. Но в конце все строки белые. Я уверен насчет значения роли пользователя (1, int32) и значения следующего уровня. [code]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);
dgvRequests.Refresh(); } } [/code] Я уверен, что уровень верен и в datagridview есть данные с этим уровнем: [img]https://i.sstatic.net/MB9boBlp.png[/img]