11

मुझे एक डाटाग्रिड मिला है जो मैंने एक SQLDataApter से जुड़ा हुआ है। कोड में दर्शाया गया है अगर मैं ग्रिड DataTextColumn प्रयोग करने के लिए XAML की स्थापना नीचे यह पूरी तरहडेटाग्रिड टेम्पलेट कॉलम दो तरह से बाध्यकारी काम नहीं कर रहा है

<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="27,42,0,0" Name="dataGrid1" VerticalAlignment="Top" AreRowDetailsFrozen="True"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding KEY}" Visibility="Hidden" IsReadOnly="True"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding CHARACTERISTIC_CODE}" Header="Unit" IsReadOnly="True" /> 
      <DataGridTextColumn Binding="{Binding UNIT_CHAR}" Header="Unit" IsReadOnly="True" /> 
      <DataGridTextColumn Binding="{Binding IC_DEF_CHAR_NUMERIC}" Header="Number" IsReadOnly="False"/> 
      <DataGridTextColumn Binding="{Binding IC_DEF_CHAR_TEXT}" Header="Text" IsReadOnly="False" /> 
      <DataGridTextColumn Binding="{Binding IsNumeric}" Header="Status" IsReadOnly="True" /> 
      <DataGridTextColumn Binding="{Binding IsText}" Header="Status" IsReadOnly="True" /> 
     </DataGrid.Columns> 

मैं का उपयोग कर कोड में एक datatable को यह बाध्यकारी हूँ dataGrid1.ItemsSource = dTable.DefaultView काम करता है और एक बटन है कि SqlDataAdapter अद्यतन विधि dAdapter.Update (dTable)

समस्या यह है कि मैं का उपयोग कर संपादन IC_DEF_CHAR_TEXT क्षेत्र को निष्क्रिय करना चाहते परिवर्तनों को सहेजता है जब रिकॉर्ड isNumeric और IC_DEF_CHAR_TEXT जब रिकॉर्ड ISTEXT। मैंने IsReadOnly संपत्ति को बाध्य करने की कोशिश की लेकिन पाया कि यह बाध्यकारी नहीं है, इसलिए मैंने दो फ़ील्ड के लिए टेम्पलेट बनाए और IsEnabled प्रॉपर्टी को IsText और IsNumeric फ़ील्ड में बाध्य किया।

<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="27,42,0,0" Name="dataGrid1" VerticalAlignment="Top" AreRowDetailsFrozen="True"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding KEY}" Visibility="Hidden" IsReadOnly="True"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding CHARACTERISTIC_CODE}" Header="Unit" IsReadOnly="True" /> 
      <DataGridTextColumn Binding="{Binding UNIT_CHAR}" Header="Unit" IsReadOnly="True" /> 
      <DataGridTemplateColumn Header="Numeric" > 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBox Text="{Binding Path=IC_DEF_CHAR_NUMERIC, Mode=TwoWay}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
       <DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
         <TextBox IsReadOnly="False" Text="{Binding Path=IC_DEF_CHAR_NUMERIC, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
       </DataTemplate> 
       </DataGridTemplateColumn.CellEditingTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Text" > 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBox Text="{Binding Path=IC_DEF_CHAR_TEXT, Mode=TwoWay}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
       <DataGridTemplateColumn.CellEditingTemplate> 
        <DataTemplate> 
         <TextBox Text="{Binding Path=IC_DEF_CHAR_TEXT, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellEditingTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 

यह ठीक काम किया है जैसे मैं चाहता था, बक्सें सक्षम किए गए थे जब आवश्यक। हालांकि टेक्स्टबॉक्स में किए गए परिवर्तन अब अद्यतन के दौरान डेटाबेस में सहेजे नहीं गए हैं। क्या कोई वहां मुझे समझा सकता है कि डेटाबेस अब अपडेट क्यों नहीं किया जा रहा है?

+0

दो-तरफा बाध्यकारी का उपयोग न करने के लिए 'सेल टेम्पलेट' को बदलने का प्रयास करें क्योंकि यह अनिवार्य रूप से केवल खिड़की के रूप में कार्य करना चाहिए। – Shoe

+0

मैं मूल रूप से इसे इस तरह से स्थापित करता हूं और यह भी काम नहीं करता है। मुझे लगता है कि दो तरह का डिफ़ॉल्ट है लेकिन मुझे 100% यकीन नहीं है। –

+0

मेरा मतलब यह है कि 'टेक्स्टबॉक्स' 'टू-वे' के लिए डिफ़ॉल्ट होगा, इसे 'सेलटेम्प्लेट' पर 'वन-वे' में बदलने का प्रयास करें। आप केवल 'सेल-एडिटिंग टेम्पलेट' – Shoe

उत्तर

50

मैं एक ही समस्या थी, स्रोत को अद्यतन करने नहीं:

<DataGridTemplateColumn Header="Obs" IsReadOnly="False"> 
    <DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <TextBox Name="txtObs" Width="80" Text="{Binding Path=ObsPedido, Mode=TwoWay}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

मेरे लिए यह सिर्फ UpdateSourceTrigger=PropertyChanged

<TextBox Name="txtObs" Width="80" Text="{Binding Path=ObsPedido, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
+5

मुझे एक ही समस्या थी और 'UpdateSourceTrigger = PropertyChanged' को हल करने के लिए इसे हल किया गया। मुझे लगता है कि इसे उत्तर के रूप में चिह्नित किया जाना चाहिए। –

+0

वही समस्या, यह हल हो गया। एक बग की तरह लग रहा है। –

+0

इसने मेरी समस्या भी हल की। यह केवल एक डाटाग्रिड के साथ एक बग है, मुझे लगता है। डेटाग्रिड के बाहर सामान्य क्षेत्रों के साथ अपेक्षित 2 तरीके बाध्यकारी काम करता है। – AnjumSKhan

0

मैं एक ही समस्या और समाधान @jrivam द्वारा नहीं किया तैनात था जोड़ना काम मदद। मेरे लिए सही तरीके से काम करने के लिए बाध्यकारी पाने के लिए मुझे OneWayToSource बाइंडिंग मोड का उपयोग करने के लिए CellEditingTemplate को बदलना पड़ा।

<DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding Path=IC_DEF_CHAR_TEXT, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
संबंधित मुद्दे