2012-12-26 13 views
6

मूल बातें को हटाने तो बाद अपडेट नहीं हो:ListView DataTable साथ बाइंडिंग, पंक्ति

mainGrid.SetBinding(Grid.DataContextProperty, 
    new Binding() { 
     Source = new DataView() 
      { Table = SQLHandler.GetHandler[classType.ToString()] } 
    } 
); 
XAML में

:

मैं इस पर एक ListView, जो मेरे ग्रिड के DataContext की आबादी है के साथ एक खिड़की मिल गया है
<ListView Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" ItemsSource="{Binding}"> 

सब ठीक काम करता है, यह आबादी है। जैसा कि आप ऊपर देख सकते हैं, मेरे पास एक SQLHandler क्लास है जिसे सिंगलटन द्वारा एक्सेस किया जा सकता है, और मैं इंडेक्सर के साथ अपनी टेबल तक पहुंच सकता हूं।

समस्या: खिड़की लोड हो रही है, मैं एक पंक्ति का चयन कर रहा हूं, संपादन बटन पर क्लिक कर रहा हूं, नई विंडो लोड हो गई है, जहां मुझे चयनित पंक्ति का विवरण मिलता है। जब मैं इस पंक्ति को इस नई विंडो के माध्यम से हटा देता हूं और इसे बंद करता हूं, तो मुख्य विंडो (जहां पूर्ण डेटाटेबल दिखाया जाता है) तदनुसार अपडेट नहीं किया जाता है। मुझे पता है कि समाधान क्या होना चाहिए, लेकिन मैं इसे काम नहीं कर सकता। (Inotifyproperty SqlHandler वर्ग, Binding.IndexerName आदि के लिए इंटरफ़ेस बदल ..)

यहाँ मुख्य बात यह है: डाटासेट, मेरे SqlHandler कक्षा में नहीं है, यह SqlExecuter, जहाँ मेरे sqlcommands के सभी निष्पादित किया जा रहा में है।

public override DataTable this[string key] 
{ 
    get 
    { 
     if (sqlExecuter.GetDataSet.Tables.Contains(key)) 
      return sqlExecuter.GetDataSet.Tables[key]; 
     throw new KeyNotFoundException("The specified key was not found"); 
    } 
} 

जहां GetDataSet है:

public DataSet GetDataSet 
{ 
    get { return ds; } 
} 

मैं कैसे यह काम कर सकते हैं? जब मैं एक अलग विंडो में एक पंक्ति हटा देता हूं और उसे बंद करता हूं, तो मुख्यविंडो की सूचीदृश्य स्वयं अपडेट नहीं होता है। मेरे पास एकमात्र विकल्प है रीफ्रेश बटन डालना, और फिर डेटाकॉन्टेक्स्ट संपत्ति को पुन: स्थापित करना, फिर निश्चित रूप से यह काम कर रहा है, लेकिन मेरा लक्ष्य एक 'लाइव' अपडेट सिस्टम होना है, यही कारण है कि बाध्यकारी सभी के लिए है।

मैंने जो कोशिश की है: SqlExecuter में GetDataSet: inotifypropertychanged इंटरफ़ेस को कार्यान्वित किया, लेकिन कुछ भी नहीं बदला। और मैं SqlHandler में मेरी इंडेक्सर पर लागू किया जा सकता है नहीं किया है INotifyPropertyChanged, क्योंकि यह एक सेटर नहीं है, मैं हमेशा बस से कोड-पीछे टेबल तक पहुँचने कर रहा हूँ, मेरे SqlDataAdapter उन्हें पॉप्युलेट किया जाता है (विधि भरें)

ps : मैं वास्तव में एक अवलोकन करने योग्य चयन बनाने की योजना नहीं बना रहा हूं, क्योंकि मेरे 9 0% कोड को फिर से लिखा जाना चाहिए और जब मैं एक पंक्ति हटा देता हूं, तो मैं अपना डेटासेट साफ़ करता हूं और इसे फिर से भरता हूं, इसलिए मैं इसे हर बदलाव पर ध्यान देने की भी उम्मीद नहीं कर रहा हूं , जब मैं अपने datatable फिर से भरना, मेरे सूचीदृश्य इसके बारे में .. जानते हैं और खुद को ताज़ा

उत्तर

0

आप दो तरह से करने के लिए बाध्यकारी मोड सेट करना पड़ सकता है चाहिए:

Mode = BindingMode.TwoWay 
कुछ गैर-स्पष्ट कारणों के लिए

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

1

मुझे लगता है कि पॉपअप के रूप में दूसरी विंडो का उपयोग करना समस्या हो सकती है। आप एक ही पृष्ठ पर संपादन कर रहे थे, तो आप एक सरल

ListView1.DataBind() 

नष्ट आदेश के अंत में सूची की सामग्री ताज़ा करने के लिए इस्तेमाल कर सकते हैं। या यदि सूची को पुनः लोड करने के बजाय पृष्ठ को फिर से खींचा गया था, तो आप सूची को अपडेट करने के लिए IsPostBack विधि का उपयोग कर सकते हैं।

आप पृष्ठ के नाम को कॉल करने का प्रयास कर सकते हैं और फिर अपनी दूसरी विंडो से सूची दृश्य देख सकते हैं, लेकिन मुझे यकीन नहीं है कि आप किसी अन्य विंडो से उस तरह के कमांड को निष्पादित कर सकते हैं या नहीं।

वैकल्पिक रूप से आप एक अलग विंडो के बजाय एक अलग पृष्ठ पर संपादन कर सकते हैं, इसलिए जब आप मूल पृष्ठ पर वापस आते हैं तो सूचीदृश्य को फिर से खींचा जा रहा है।

अपने आप की तरह मुझे यकीन है कि आपकी समस्या का एक आसान समाधान है, लेकिन दुर्भाग्य से मुझे यह नहीं पता।