2010-12-17 6 views
6

मेरे पास स्वत: जेनरेटेड कॉलम के साथ एक WPF 4.0 डेटाग्रिड है। मैं केवल उपयोगकर्ता को पहला कॉलम संपादित करने की अनुमति देना चाहता हूं। क्या ऐसा करने का कोई आसान तरीका है?क्या मैं निर्दिष्ट कर सकता हूं कि कौन से कॉलम एक WPF DataGrid में संपादन योग्य हैं?

मैं डेटाग्रिडसेल शैली जोड़ने की कोशिश कर रहा था और कॉलमनाम (1 कॉलम हमेशा एक ही नाम) या कॉलम इंडेक्स के आधार पर इसकी संपादन क्षमता सेट कर रहा था, हालांकि मैं इसके लिए सही एक्सएएमएल नहीं समझ सकता, या यहां तक ​​कि यदि यह संभव हो ।

उत्तर

4

मुझे मिल गया .... यहाँ मैं क्या इस्तेमाल किया है:

<DataGrid.Resources> 
    <Style TargetType="{x:Type DataGridCell}"> 
     <Setter Property="IsEnabled" Value="False" /> 
     <Style.Triggers> 
      <DataTrigger Value="PART_IsSelected" Binding="{Binding Path=Column.Header, RelativeSource={RelativeSource Self}}"> 
       <Setter Property="IsEnabled" Value="True" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.Resources> 

आप चाहते हैं, तो आप Column.Header

के बजाय Column.DisplayIndex उपयोग कर सकते हैं

मैं अभी भी यकीन नहीं है क्यों बाध्यकारी जीता 'टी सीधे काम करते हैं और एक RelativeSource द्वारा संदर्भित किए जाने की आवश्यकता है, लेकिन कम से कम यह काम करता है :)

6

प्रत्येक कॉलम में IsReadOnly संपत्ति है। साथ ही, संपूर्ण डेटाग्रिड में भी ISRead है [यह बाध्यकारी को प्रभावित नहीं करता है, केवल उपयोगकर्ता को फ़ील्ड को संपादित करने की क्षमता]

संपादित करें: एक उत्तर दिया, क्षमा करें। मैं केवल अनुमान लगा सकता हूं कि यदि संभव हो तो आपको कॉलम ऑटो-जनरेट नहीं करना चाहिए, ताकि आप नियंत्रित कर सकें कि कौन से लोग पढ़ रहे हैं और कौन सा कंट्रोलटेम्प्लेट कहां जाता है ... केवल कॉलम की बाइंडिंग प्रॉपर्टी का उपयोग करें ताकि आपको उन्हें स्वत: उत्पन्न करने की आवश्यकता न हो।

+0

AutoGenerateColumns क्वेरी कि डेटा ग्रिड बनाता है के बाद से आवश्यक है उपयोगकर्ता परिभाषित – Rachel

+0

मुझे लगता है कि यह लेख आपके मदद कर सकता है: http://blog.smoura.com/wpf-toolkit-datagrid-part-ii-custom स्टाइलिंग/आपको इसके लिए अपनी शैली बनाने की आवश्यकता होगी, लेकिन मुझे लगता है कि यह पूरी तरह से सक्षम है – Machinarius

+0

अच्छा लेख, लेकिन मेरी स्थिति में वास्तव में उपयोगी नहीं है। मुझे यह सेट करने की ज़रूरत है कि कोई कॉलम संपादन योग्य हो या उसके प्रदर्शन इंडेक्स या कॉलमनाम पर आधारित न हो, और मुझे पहले से पता नहीं था कि मेरे कॉलम एकल संपादन योग्य कॉलम के अलावा अन्य क्या होंगे। – Rachel

11

नीचे दिए गए नमूना एक या अधिक स्तंभ

private void Grid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
    { 
     if (e.Column.Header.ToString() == "COLUMNNAME") 
     { 
      // e.Cancel = true; // For not to include 
      // e.Column.IsReadOnly = true; // Makes the column as read only 
     } 

    } 
के लिए काम कर देता है
0
private void dgTableDetailAdj_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) 
{ 
    foreach (DataGridColumn col in dgTableDetailAdj.Columns) 
    { 
     if (col.Header.Equals("columnName")) 
     { 
      col.IsReadOnly = true; 
     } 
    } 
}
+1

कृपया अपना कोड सही तरीके से प्रारूपित करें (कम से कम 4 रिक्त स्थानों से सब कुछ इंडेंट करें, और आवश्यकतानुसार अधिक इंडेंट न करें)। साथ ही, कोड केवल उत्तर ही निराश होते हैं क्योंकि वे समस्या को हल करते हैं _how_ की व्याख्या नहीं करते हैं। क्या आप इन मुद्दों को हल करने के लिए कृपया [अपनी पोस्ट संपादित करें] (http://stackoverflow.com/posts/37851029/edit) कर सकते हैं? धन्यवाद और StackOverflow में आपका स्वागत है। –

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