c# - ListBoxView populated using Linq based on TimePicker Value -


<पी>

WPF सी # का इस्तेमाल करते हैं Xceed.WPF.Toolkit से TimePicker का उपयोग करें TimePicker नामक फाइल लोड करने में सक्षम होना चाहते हैं फ़ाइल के अंतिम लिखने के समय के आधार पर एक सूचीबैक के लिए

प्रश्न: मैं Linq का उपयोग करते हुए लॉग टाइम चर के आधार पर सूचीबद्ध फाइलों को सीमित करना चाहूंगा और जहां फ़ाइलों को लॉग टाइम से मेल करना होगा < P> सूची बॉक्स की आबादी के लिए कोड वर्तमान में

  निजी void LoadLogsNoDate (स्ट्रिंग ldate, string ext) {string [] लॉग = directory.GetFiles (logPath + ldate, ext); InitializeComponent (); logList = नया निरीक्षणीय कलेक्शन & lt; स्ट्रिंग & gt; (); logList.Clear (); LbLogs.ItemsSource = logList; Foreach (लॉग में स्ट्रिंग लॉगनाम) {string s = logName.Substring (logName.IndexOf (ldate) + ldate.Length + 1); int extPos = s.LastIndexOf ("।"); // & lt; - एक्सटेंशन s = s.Substring (0, extPos) पाता है; // & lt; - एक्सटेंशन s = s.ToUpper () निकाल देता है; // & lt; - अपरकेस लॉग लिस्ट में बदल जाता है। जोड़ें (एस); // & amp; lt; - यह पाया गया आइटम जोड़ता है) डेटाकॉन्टेक्स = यह; }   

एक लॉग-टाइम वेरिएबल पर टाइमकिक्सर वैल्यू को सेट करने की आवश्यकता होती है तो प्रदर्शित होने वाले आइटम्स की सूची को फ़िल्टर करने के लिए लॉग-टाइम का उपयोग करें

सफलतापूर्वक इस कोड का उपयोग करने के लिए LastWriteAccess समय में बस कुछ सहायता की आवश्यकता है इसे सभी को अच्छी तरह से व्यवस्थित करें

  सार्वजनिक स्थिर शून्य टाइम्स (स्ट्रिंग एसफ़ाइल) {FileInfo info = New FileInfo (sFile); दिनांक समय समय = info.LastWriteTime; स्ट्रिंग एस = समय। टॉस्ट्रिंग ("एच एच: एमएम टीटी"); कंसोल.प्रकाश रेखा ("अंतिम पहुंच:" + s); }    

सबसे पहले, आप लॉग का प्रतिनिधित्व करने वाला स्ट्रिंग के साथ समय को जोड़ना चाहते हैं फ़ाइल। ऑब्ज़र्वबल कॉलेक्शन के बजाय आपके पास एक ऑब्झर्वबल कलेक्शन होगा लॉग को परिभाषित किया जाएगा:

  सार्वजनिक वर्ग लॉग {स्ट्रिंग लॉगनाम}; दिनांक समय लॉगराइटटाइम; }   

संग्रह बनाना आपके अन्य फ़ंक्शन को कॉल करेगा (पढ़ने का समय वापस करने के लिए संशोधित):

  foreach (लॉग में स्ट्रिंग लॉगनाम) {string s = logName.Substring (logName.IndexOf (ldate) + ldate.Length + 1); int extPos = s.LastIndexOf ("।"); // & lt; - एक्सटेंशन s = s.Substring (0, extPos) पाता है; // & lt; - एक्सटेंशन s = s.ToUpper () निकाल देता है; // & lt; - अपरकेस लॉग में नया इटैम = नया लॉग (); NewItem.LogName = s; NewItem.LogWriteTime = GetFileAccessTime (नों) logList.Add (एस); // & lt; - वह आइटम जो इसे ढूँढता है जोड़ता है) सार्वजनिक डेटटाइम GetFileAccessTime (स्ट्रिंग एसफ़ाइल) {FileInfo info = New FileInfo (sFile); वापसी जानकारी। लिस्ट्राइटटाइम; }   

अब हमारे पास अपना समय संग्रहीत किया गया है, मैं यह सोचने जा रहा हूं कि अपना टाइम पिक्चर की चयनित वैल्यू संपत्ति FilterTime के लिए बाध्य है। फ़िल्टरिंग की समस्या से निपटने के दो तरीके हैं:

  1. अपने दृश्य को एक अलग IEnumerable फ़िल्टर किए गए लोगो में बांधाएं और फ़िल्टरटाइम चर: <पूर्व> फ़िल्टर करें = लॉग लिस्ट। कहाँ (एल = & gt; एल। लॉग्राइटटाइम & gt; = फ़िल्टरटाइम);

  2. एक CollectionViewSource का उपयोग करें। यह विधि बहुत बढ़िया है! सबसे पहले, एक CollectionViewSource गुण जिसे लॉग्ससोर्स नाम दिया गया है। पुरानी ऑब्ज़्वेशेबल कलेक्शन के बजाय इस पर बाइंड करने के लिए अपना एक्सएएमएल बदलें।

      & lt; लिस्ट बॉक्स आइटमस्सोर्स = "{बाध्यकारी फिल्लाल्ट्स.दृश्य}" / & gt;       

    अब, एक इनट फ़ंक्शन के लिए आपके पास जो भी है (कन्स्ट्रक्टर, जो भी लोड लोड्स नोडडा कॉल करता है, आदि) लिखें:

      फिल्डेरोग्स = नया संग्रहव्यूससोर्स (); फ़िल्टर किए गए लॉग। स्रोत = लॉग लिस्ट; फ़िल्टर किए गए लॉग। फ़िलटर + = चेकअवेस्ट टाइम;   

    यह एक नया CollectionViewSource सेट करता है जो आपके लॉग लिस्ट संग्रह को इंगित करता है, और यह निर्धारित करने के लिए CheckAccessTime फ़ंक्शन का उपयोग करता है कि क्या किसी विशेष लॉग प्रविष्टि को "दृश्य में शामिल किया जाना चाहिए "संपत्ति (जो आप पहले से बाध्य है)।

    CheckAccessTime फ़ंक्शन ऐसा दिखेगा:

      निजी शून्य checkAccessTime (ऑब्जेक्ट प्रेषक, FilterEventArgs ई) {लॉग लॉग एंटर = ई लॉग के रूप में आइटम; अगर (लॉगइनंट्री! = नल) {यदि (लॉगइनेंट्री.लॉग्राइटटाइम & gt; = फ़िल्टरटाइम) (ई। स्वीकृत = सच; } और (ई। स्वीकृत = गलत; }}}   

    अंत में, आपको किसी भी समय चयन परिवर्तनों को फ़िल्टर रीफ़्रेश करना होगा। इसलिए, FilterTime लिखने के सेटर में:

      फ़िल्टर किए गए लोगो। दृश्य। रीफ्रेश ();   

    दूसरा विकल्प, मेरी राय में, कार्य को पूरा करने का एक बहुत ही स्वच्छ तरीका है, हालांकि यह पहली बार में थोड़ा अधिक भ्रमित हो सकता है। मुझे पता है कि मैं कुछ भी स्पष्ट कर सकता हूं!

    इस ब्लॉग पोस्ट को दूसरी विधि पर शोध करने में काफी मदद मिली:

    फ़िल्टर इवेंट के लिए MSDN:

Comments

Popular posts from this blog

Pass DB Connection parameters to a Kettle a.k.a PDI table Input step dynamically from Excel -

multithreading - PhantomJS-Node in a for Loop -

c++ - MATLAB .m file to .mex file using Matlab Compiler -