.NET 5 Покраска строки в DataGrid если есть искомое значение

Рейтинг: 0Ответов: 0Опубликовано: 19.08.2023

У меня есть запрос в базу данных Аксесса и есть поле 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"

Ответы

Ответов пока нет.