2015-10-06 2 views
1

Я извлекаю данные из базы данных и размещаю содержимое в DataGrid WPF;C# WPF DataGrid Изменение FontColour строки на основе значения

пространство имен ContractsExcel { общественный частичный класс UserSelection: Страница { общественный UserSelection() { InitializeComponent(); dataGrid.CanUserAddRows = false; string username = Environment.UserName; userImage.Source = new BitmapImage (новый Uri (@ "C: \ Users \ DanD \ Desktop \" + имя пользователя + ". Jpg")); }

private void FillDataGrid(object sender, RoutedEventArgs e) 
    { 
     string constr = ConfigurationManager.ConnectionStrings["dbfString"].ConnectionString; 
     using (OleDbConnection dbfCon = new OleDbConnection(constr)) 
     { 
      try 
      { 
       dbfCon.Open(); 
       DataTable dTable = new DataTable(); 
       string dbfQuery = "SELECT em_pplid, em_name, em_netname FROM employs WHERE em_netname NOT LIKE ''"; 
       OleDbCommand MyQuery = new OleDbCommand(dbfQuery, dbfCon); 
       OleDbDataAdapter DA = new OleDbDataAdapter(MyQuery); 
       DA.Fill(dTable); 
       dataGrid.ItemsSource = dTable.AsDataView(); 
      } 
      catch (OleDbException) 
      { 
       throw; 
      } 
     } 
    } 
} 

}

Что я хотел бы сделать, это изменить цвет шрифта всей строки на основе содержимого ячейки строки, например, если заказ заветной изменить цвет шрифта строка - красная.

Хотя есть несколько вопросов по этой теме, существующих уже я не мог найти ничего конкретного. Должно ли это быть сделано через XAML или C# и как я буду заниматься реализацией этой функции?

Обновленный код с XAML;

<DataGrid x:Name="dataGrid" Margin="0,0,10,0" Grid.ColumnSpan="3" ColumnWidth="*" FontSize="18.667"> 
     <DataGrid.RowStyle> 
      <Style TargetType="DataGridRow"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding em_netname}" Value='Chris'> 
         <Setter Property="Foreground" Value="Red"></Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </DataGrid.RowStyle> 
    </DataGrid> 

Код для заполнения DataContext в C#;

пространство имен ContractsExcel { общественный частичный класс UserSelection: Страница { общественный UserSelection() { InitializeComponent(); dataGrid.CanUserAddRows = false; string username = Environment.UserName; userImage.Source = new BitmapImage (новый Uri (@ "C: \ Users \ DanD \ Desktop \" + имя пользователя + ". Jpg")); }

private void FillDataGrid(object sender, RoutedEventArgs e) 
    { 
     string constr = ConfigurationManager.ConnectionStrings["dbfString"].ConnectionString; 
     using (OleDbConnection dbfCon = new OleDbConnection(constr)) 
     { 
      try 
      { 
       dbfCon.Open(); 
       DataTable dTable = new DataTable(); 
       string dbfQuery = "SELECT em_pplid, em_name, em_netname FROM employs WHERE em_netname NOT LIKE ''"; 
       OleDbCommand MyQuery = new OleDbCommand(dbfQuery, dbfCon); 
       OleDbDataAdapter DA = new OleDbDataAdapter(MyQuery); 
       DA.Fill(dTable); 
       dataGrid.ItemsSource = dTable.AsDataView(); 
      } 
      catch (OleDbException) 
      { 
       throw; 
      } 
     } 
    } 
} 

}

+0

Стиль целенаправленные к другому типу должен присутствовать в пределах . – AnjumSKhan

+0

Почему вы меняете стиль для DataGridCell, если хотите изменить цвет для всей строки?Это НЕ то, что я предложил ..... Пожалуйста, снова посмотрите на мой ответ. – jsanalytics

+0

@jstreet Извинения Я обновил его сейчас. – CBreeze

ответ

-1

шаблон данных для записи таблицы данных с пользовательским цветом для строк. вы присваиваете таблицу данных непосредственно сетке. так что вы не можете изменить цвет на основе данных. еще вам нужно написать класс модели для цвета, а затем установить цвет на основе данных.

+0

См. Мой ответ. DataTriggers создаются для таких сценариев. Вы можете сделать то же самое с кодом. – AnjumSKhan

0
  1. Для таких сценариев вам нужны DataTriggers.
  2. Изменение переднего плана DataGridCell изменит значение всей строки, поскольку стиль применяется ко всем ячейкам.

Стиль ниже будет заставлять заветные ряды заказов выглядеть с красным цветом шрифта, а остальные строки будут иметь цвет шрифта, как Aqua.

<Style TargetType="DataGridCell"> 
    <Setter Property="Foreground" Value="Aqua"/> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Order}" Value="Cherished"> 
      <Setter Property="Foreground" Value="Red"/> 
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 

Другой подход заключается в использовании

  <DataGrid.RowStyle> 
       <Style TargetType="DataGridRow"> 
        <Setter Property="Foreground" Value="Aqua"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Title}" Value="Pepsi"> 
          <Setter Property="Foreground" Value="Red"/> 
         </DataTrigger> 
        </Style.Triggers> 

       </Style> 
      </DataGrid.RowStyle> 
+0

Спасибо за ваш ответ. Я обновил свой код, используя ваш предложенный ответ, но теперь у меня проблема: «Коллекция предметов должна быть пустой до использования источника элемента». Я обновил свой код сейчас своим кодом XAML, что вы предлагаете? – CBreeze

+0

Вы должны поместить свой стиль в