2011-09-11 11 views
7

पर डेटाग्रिड पंक्ति पृष्ठभूमि आधारित मैं वर्तमान में सी # डब्ल्यूपीएफ डेटाग्रिड पर काम कर रहा हूं। मेरे पास डेटाग्रिड है जिसमें ऑटो जेनरेट किए गए कॉलम हैं और कोड SQLite डेटाबेस से कनेक्ट होता है और डेटासेट बनाता है और फिर यह डेटासेट डेटाग्रिड आइटम्ससोर्स के रूप में सेट किया जाता है।सेलग्रेड

नीचे डेटा ग्रिड

<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 स्थापित करने के लिए कोड है उत्पन्न) आईडी, दिनांक, समय, स्थिति हैं। मुझे क्या करने में सक्षम होना चाहिए यदि स्थिति कॉलम की पंक्ति में मान बराबर है तो त्रुटि उस पंक्ति के पृष्ठभूमि रंग को बदल देती है।

मुझे लगता है कि मुझे डेटाग्रिड टैग के भीतर कुछ प्रकार के स्टाइल टैग और डेटाट्रिगर्स जोड़ने की ज़रूरत है लेकिन मुझे यकीन नहीं है कि मुझे क्या चाहिए। मैंने जो भी कोड कोड करने की कोशिश की है, वह आइटम्ससोर्स सेट करता है, यह कहता है कि आइटमसोर्स जोड़ने से पहले स्रोत को रिक्त होना आवश्यक है।

आपकी सहायता के लिए धन्यवाद।

+0

जिस तरह से हम शैली कोशिकाओं और पंक्तियों का नाम अज्ञात बेकार शैलियों का उपयोग कर है। जब हम अपने TargeType निर्दिष्ट करते हैं तो वे सभी तत्वों पर लागू होते हैं। http://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx –

उत्तर

19

आप ऐसा करने के लिए डेटा ट्रिगर का उपयोग कर सकते हैं।

यहां एक त्वरित नमूना है। मैंने गुण, आयु, और सक्रिय गुणों वाले व्यक्ति नामक एक वर्ग बनाया है।

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

मुख्य विंडो के निर्माता में, मैं एक सूची के लिए 3 Person वस्तुओं जोड़ें, फिर DataGrid है कि सूची के लिए बाध्य।

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; 
    } 
} 

फिर मेनविंडो के लिए एक्सएएमएल में, मैं एक संसाधन के रूप में डेटा ट्रिगर शैली बना देता हूं।

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

क्या इस ट्रिगर करता है यह Person वस्तु DataGridRow में है कि से Active क्षेत्र से मूल्य लेता है, और अगर है कि मूल्य गलत है, तो यह लाल करने के लिए पंक्ति की पृष्ठभूमि का रंग बदल जाता है है।

+0

आपकी सहायता के लिए धन्यवाद। यह तब काम कैसे करेगा जब डाटाग्रिड डेटाबेस से मुकाबला हो। ऐसा लगता है कि यह कोड में मैन्युअल रूप से फ़ील्ड असाइन कर रहा है। डेटाबेस बाध्यकारी के साथ यह कैसे काम करेगा। खेद है कि इस तरह की चीज – Boardy

+0

@ बोर्डी की बात आती है ... यह बिल्कुल वही काम करना चाहिए। मैं बस डेटाग्रिड में डेटा का संग्रह बाध्य कर रहा हूं। अनिवार्य रूप से, यह वही बात है जब डेटासेट आपके डेटाबेस डेटा का उपयोग करते समय बाध्य करता है। –

+0

शानदार आपकी मदद के लिए बहुत बहुत धन्यवाद। मैं उलझन में था क्योंकि मैं सोच रहा था कि स्टाइलिंग डेटाग्रिड टैग के भीतर विंडो नहीं थी। स्रोत। आपकी सहायता के लिए एक बार फिर से धन्यवाद – Boardy