2012-04-07 24 views
6

मेरे पास एक WPF डेटाग्रिड है जो ऑब्जर्वरेबल कोलेक्शन से भरा हुआ है।WPF डेटाग्रिड पंक्ति रंग बदलें

अब मैं कार्यक्रम शुरू होने पर पंक्ति सामग्री के आधार पर पंक्तियों को रंगना चाहता हूं और यदि रनटाइम के दौरान कुछ बदलता है।

System.Windows.Controls.DataGrid areaDataGrid = ...; 
ObservableCollection<Area> areas; 
//adding items to areas collection 
areaDataGrid.ItemsSource = areas; 

areaDataGrid.Rows <-- Property not available. how to access rows here? 

CollectionView myCollectionView = (CollectionView)CollectionViewSource.GetDefaultView(areaDataGrid.Items); 
((INotifyCollectionChanged)myCollectionView).CollectionChanged += new NotifyCollectionChangedEventHandler(areaDataGrid_Changed); 
... 

void areaDataGrid_Changed(object sender, NotifyCollectionChangedEventArgs e) 
{ 
    //how to access changed row here? 
} 

मैं प्रारंभ और रनटाइम पर पंक्तियों तक कैसे पहुंच सकता हूं?

उत्तर

11

RowStyle का उपयोग करें। आप रंग को सशर्त रूप से बदलने के लिए Triggers का उपयोग कर सकते हैं, या बस इसे अपने आइटम पर Brush संपत्ति से बांधें और उस संपत्ति को क्रमशः बदलें।

5

इसे ट्रिगर के बजाय कोड के माध्यम से बदलने के लिए यह नीचे जैसा कुछ दिख सकता है। आप डेटा को सरणी के रूप में एक्सेस कर सकते हैं और फिर इसकी तुलना कर सकते हैं। इस उदाहरण में मैं 4 वें कॉलम की तुलना कर रहा हूं यह देखने के लिए कि क्या यह 0 से बड़ा है और यह देखने के लिए 5 वें कॉलम है कि यह 0 से कम है या नहीं, अन्यथा इसे डिफ़ॉल्ट रंग पेंट करें। कोशिश करें/इसे पकड़ें क्योंकि कुछ तर्कों को यह देखने के लिए जोड़ा जाना चाहिए कि यह वैध पंक्ति है या नहीं ..... या आप नीचे दी गई त्रुटियों को अनदेखा कर सकते हैं (हालांकि वास्तव में अच्छा अभ्यास नहीं) लेकिन यह उपयोग करने योग्य होना चाहिए ।

private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e) 
    { 
     try 
     { 
      if (Convert.ToDouble(((System.Data.DataRowView)(e.Row.DataContext)).Row.ItemArray[3].ToString()) > 0) 
      { 
       e.Row.Background = new SolidColorBrush(Colors.Green); 
      } 
      else if (Convert.ToDouble(((System.Data.DataRowView)(e.Row.DataContext)).Row.ItemArray[4].ToString()) < 0) 
      { 
       e.Row.Background = new SolidColorBrush(Colors.Red); 
      } 
      else 
      { 
       e.Row.Background = new SolidColorBrush(Colors.WhiteSmoke); 
      } 
     } 
     catch 
     { 
     } 
    } 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^