2011-09-11 15 views
7

現在、C#WPFデータグリッドで作業しています。私は自動的に生成された列を持つDataGridを持っており、コードはSQLiteデータベースに接続してデータセットを作成し、このデータセットはDataGrid ItemsSourceとして設定されます。以下DataGridの行の背景がセルの値に基づいて

は、データグリッド

<DataGrid AutoGenerateColumns="True" 
      Margin="12,71,12,32" 
      Name="tblLog" 
      ColumnWidth="*" 
      CanUserResizeRows="False" 
      AreRowDetailsFrozen="False" 
      CanUserAddRows="True" 
      CanUserDeleteRows="True" 
      IsReadOnly="True" 
      MouseDoubleClick="tblLog_MouseDoubleClick">     
</DataGrid> 

のXAMLとコードされ、以下のデータグリッド

try 
{ 
    DataSet ds = new DataSet(); 
    SQLiteDataAdapter da = new SQLiteDataAdapter(query, db.conn); 
    da.Fill(ds); 

    //tblGrid.AutoGenerateColumns = true; 
    tblGrid.ItemsSource = ds.Tables[0].DefaultView;      
} 
catch (SQLiteException ex) 
{ 
    MessageBox.Show("Unable to retrieve logins from database.\n\n" + ex.Message + "\n\nError Code: " + ex.ErrorCode); 
} 

データベースに示されている列(自動車のためのItemsSourceを設定するためのコードであります生成される)は、ID、日付、時刻、ステータスです。 ステータス行の行の値がErrorと同じ行の背景色を変更することができる必要があります。

私は、DataGridタグ内にいくつかの並べ替えタグとDataTriggersを追加する必要があると思っていますが、私は何が必要なのかわかりません。 ItemsSourceを設定するコードに試したことがあれば、ItemsSourceを追加する前にSourceが空である必要があるというエラーが表示されます。

ご協力いただきありがとうございます。

+0

セルと行をスタイルする方法は、名前のないキーなしスタイルを使用することです。それらはTargeTypeを指定するときすべての要素に適用されます。 http://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx –

答えて

19

これを行うにはDataTriggerを使用できます。

ここは簡単なサンプルです。名前、年齢、およびアクティブのプロパティを持つPersonというクラスを作成しました。メインウィンドウのコンストラクタで

public class Person 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public bool Active { get; set; } 
} 

、私はその後DataGridにそのリストを結合し、リストに3つのPersonオブジェクトを追加します。

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     List<Person> people = new List<Person>(); 
     people.Add(new Person() 
     { 
      Name = "John Doe", 
      Age = 32, 
      Active = true 
     }); 
     people.Add(new Person() 
     { 
      Name = "Jane Doe", 
      Age = 30, 
      Active = true 
     }); 
     people.Add(new Person() 
     { 
      Name = "John Adams", 
      Age = 64, 
      Active = false 
     }); 
     tblLog.ItemsSource = people; 
    } 
} 

MainWindowのXAMLでは、DataTriggerスタイルをリソースとして作成します。

<Window.Resources> 
    <Style TargetType="DataGridRow"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Active}" Value="False"> 
       <Setter Property="Background" Value="Red" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

このトリガーは、それがDataGridRowであるPerson物体からActiveフィールドから値を取り、その値が偽である場合、それは赤色に行の背景色に変わりである何。

+0

ご協力いただきありがとうございます。データベースからデータグリッドが得られたとき、どのように動作しますか?これは、コード内でフィールドを手動で割り当てているかのように見えます。これはデータベースバインディングとどのように機能しますか?このようなことについては、初心者の方が少し残念です。 – Boardy

+0

@Boardy ...まったく同じように動作するはずです。私は単にデータのコレクションをDataGridにバインドしています。基本的には、データベースデータを使用してバインドするときと同じことです。 –

+0

非常にあなたの助けに感謝します。私は、スタイリングがWindow.ResourcesではなくDataGridタグ内で行われたと思っていたので、混乱しました。あなたの助けをもう一度ありがとう – Boardy

関連する問題