.NET 5 Покраска строки в DataGrid если есть искомое значение
У меня есть запрос в базу данных Аксесса и есть поле fam.Text в Xaml и после нажатии на кнопку поиска у меня происходит запрос в базу и так как в fam.Text привязаны два столбца для поиска мне надо так что если нет результата в столбце Fam а есть в столбце G_Fam то просто должно покрасить ту строку где есть результат в DataGrid. У меня результаты выводятся в DataGrid. Вот код:
string[] fieldNames = new string[] { "Fam", ... }; // вместо трёх точек есть другие столбцы в базе ..."Column1", "Column2",
string[] fieldValues = new string[] { fam.Text , ... }; // вместо трёх точек есть другие поля ...Column1.Text, Column2.Text,
OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + content + ";Jet OLEDB:Database Password=" + filePassword + ";");
connection.Open();
bool isFamSearch= false;
int intValue;
OleDbCommand command = new OleDbCommand("SELECT * FROM EmployeData WHERE ", connection);
for (int i = 0; i < fieldNames.Length; i++)
{
if (fieldNames[i] == "Fam" && !string.IsNullOrEmpty(fieldValues[i]))
{
bool isInt = int.TryParse(fieldValues[i], out intValue);
if (isInt)
{
command.CommandText += "Id LIKE ? AND ";
command.Parameters.AddWithValue("@Id", "%" + fieldValues[i] + "%");
}
else
{
command.CommandText += "(Fam LIKE ? OR [G Fam] LIKE ?)";
command.Parameters.AddWithValue("@Fam", "%" + fieldValues[i] + "%");
command.Parameters.AddWithValue("@G_Fam", "%" + fieldValues[i] + "%");
isFamSearch= true;
}
}
else if (!string.IsNullOrEmpty(fieldValues[i]))
{
command.CommandText += fieldNames[i] + " LIKE ? AND ";
command.Parameters.AddWithValue("@" + fieldNames[i], "%" + fieldValues[i] + "%");
}
}
if (isFamSearch)
{
command.Parameters["@G_Fam"].Value = "%" + fieldValues[Array.IndexOf(fieldNames, "Fam")] + "%";
}
command.CommandText = command.CommandText.TrimEnd(' ', 'A', 'N', 'D');
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(command);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet, "EmployeData");
dataGrid.ItemsSource = dataSet.Tables["EmployeData"].DefaultView;
dataGrid.LoadingRow += dataGrid_LoadingRow;
пытался через dataGrid_LoadingRow но тоже не получается. Вот код:
private void dataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = (e.Row.GetIndex() + 1).ToString();
DataRowView rowView = e.Row.Item as DataRowView;
if (rowView != null)
{
string g_Fam = rowView["G Fam"].ToString();
if (!string.IsNullOrEmpty(g_Fam) && string.IsNullOrEmpty(rowView["Fam"].ToString()))
{
e.Row.Background = Brushes.Red;
Debug.WriteLine("Row colored red: " + g_Fam);
}
else
{
Debug.WriteLine("Row not colored: " + rowView["Fam"].ToString());
}
}
}
Работает "else"
Источник: Stack Overflow на русском