2011-09-12 15 views
7

मैं डेटाग्रिड की कुछ पंक्तियों को उपयोगकर्ता द्वारा हटाने से संरक्षित करना चाहता हूं, हालांकि संपत्ति CanUserDeleteRowstrue पर सेट है।डेटाग्रिड पंक्ति को हटाए जाने से रोकें

क्या कुछ पंक्तियों की रक्षा करने की संभावना है, उम्मीद है कि डाटाबेसिंग या ट्रिगर के माध्यम से? आइटमसोर्स टी

उत्तर

13

यदि आपके पास अपनी बाध्य वस्तुओं पर एक संपत्ति है जिसका उपयोग यह निर्धारित करने के लिए किया जा सकता है कि वर्तमान पंक्ति को हटाया जा सकता है, जैसे 'IsDeleteEnabled', तो आप DataGrid की CanUserDeleteRows प्रॉपर्टी को SelectedItem.IsDeleteEnabled पर बाध्य कर सकते हैं।

उदाहरण के लिए,

<DataGrid Name="dataGrid1" 
     CanUserDeleteRows="{Binding ElementName=dataGrid1, Path=SelectedItem.IsDeleteEnabled}" 
+1

+1 अच्छा विचार है, लेकिन यह केवल तभी काम करेगा जब बहु चयन अक्षम हो। अगर यह काम करता है तो मैं परीक्षण करूंगा क्योंकि मुझे लगता है कि यह एक अच्छा समाधान है, लेकिन मैं बहु चयन पर निर्भर करता हूं और इसके लिए यह काम नहीं करेगा। – HCL

0

के एक पर्यवेक्षण चयन के लिए बाध्य है डेटाग्रिड के साथ ऐसा कभी नहीं किया। आम तौर पर, जब मुझे इस तरह कुछ नियंत्रित करने की आवश्यकता होती है, तो मैं एक ग्रिड के साथ एक सूची बॉक्स और डेटा टेम्पलेट का उपयोग करता हूं ताकि इसे ग्रिड या लिस्ट व्यू को टेम्पलेट में ग्रिड व्यू के साथ दिया जा सके क्योंकि वे दोनों आपको बातचीत पर अधिक नियंत्रण देते हैं।

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

<dg:DataGridTemplateColumn Header="Action"> 
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Text Content="Delete" /> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 

    <dg:DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ButtonEnabled="{Binding Path=IsDeleteEnabled, Mode=OneWay}" Content="Delete" Command="{Binding Path=DeleteMe}" /> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellEditingTemplate> 
</dg:DataGridTemplateColumn> 

इस विधि का उपयोग करना, के बाद से आदेश व्यक्ति वस्तु के लिए बाध्य है, तो आप शायद एक घटना अपने स्क्रीन की ViewModel ObservableCollection से उस पंक्ति को हटाने के लिए संभालती है बढ़ाने के लिए होगा।

फिर से, यह सुनिश्चित न करें कि यह सबसे अच्छा तरीका है, लेकिन यह मेरा 10 मिनट का स्टैब है। तो अगर यह भयानक है, तो कृपया मुझे बहुत अधिक वोट मत दें।

+0

इस सवाल में मेरे हित है, अगर वहाँ अपने खुद के हटाए जाने से निपटने को लागू करने के बिना डेटा ग्रिड की एकीकृत विलोपन सुविधाओं के साथ यह करने के लिए एक संभावना है। लेकिन किसी भी तरह से आपके उत्तर के लिए धन्यवाद। – HCL

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