2010-02-01 13 views
5

मैं एक टेक्स्टबॉक्स के साथ सी # में काम कर रहा हूं जो आईडी नंबर द्वारा डेटाबेस (एक्सेस एसक्यूएल) रिकॉर्ड लुकअप के लिए इनपुट के रूप में कार्य करता है। मैं टेक्स्ट बॉक्स पर ऑटोकंपलेट का उपयोग करने में सक्षम होना चाहता हूं लेकिन कुछ सीमाओं के साथ।सी # टेक्स्टबॉक्स स्वत: पूर्ण: ~ 50 सुझावों तक सीमित

बड़ी समस्या यह है कि सिस्टम में आईडी की संख्या हजारों के क्रम में है, इसलिए ऑटोकंपलेट बॉक्स को उन सभी के साथ भरने के बजाय, मुझे टेक्स्टबॉक्स में क्या है इसकी निगरानी करने की आवश्यकता है और केवल स्वतः पूर्ण सुझाव दिखाएं जब ~ 50 या कम विकल्प होते हैं। तालिका से चयन गिनती (*) कहां आईडी की तरह 'textbox.text%'

जब गिनती 50 से कम मैं के परिणामों के साथ स्वत: पूर्ण भरने है:

वर्तमान में, मैं प्रत्येक KeyDown पर इस क्वेरी कर रहा हूँ उपर्युक्त कथन का एक चयन आईडी संस्करण। इससे मुझे कई समस्याएं हुईं, ज्यादातर सी # क्विर्क लगती हैं जिन्हें मैं समझ नहीं पा रहा हूं।

1) जब मैं एक सिंगलडाउन ईवेंट के भीतर ऑटोकंपलेट कस्टमस्टेट को साफ़ या जोड़ता हूं, तो दबाई गई वास्तविक कुंजी स्ट्रिंग में नहीं मिलती है (यानी सामान्य टेक्स्ट बॉक्स इनपुट व्यवहार नहीं होता है)।

2) मैंने ऑटोकंपलेट कस्टॉमसेट अपडेट को एक अलग ईवेंट (कीप्रेस या कीपअप) में अलग करने की कोशिश की लेकिन यह या तो क्रैश हो गया, या स्वत: पूर्ण प्रदर्शन केवल छिपे जाने से पहले संक्षेप में दिखाएगा।

मुझे लगता है कि यह समस्या सामान्य होनी चाहिए और मैं बस इसके बारे में गलत तरीके से जा रहा हूं। क्या कोई सलाह दे सकता है? धन्यवाद!

संपादित करें: इस Windows है फॉर्म्स

EDIT2: एक शीर्ष 50 का चयन समस्या यह है कि उपयोगकर्ता प्रकार (और संभवत: backspaces और पुन: प्रकार) शीर्ष 50 में बदल जाएंगी और समाधान नहीं होता है।

+1

क्या यह WinForms है? WPF? ASP.NET? – LBushkin

उत्तर

1

आप TextChanged घटना के बजाय कोशिश की? मुझे उम्मीद है कि टेक्स्टबॉक्स को अपडेट करने के बाद उस ईवेंट को निकाल दिया जाएगा, इस प्रकार आपके द्वारा उल्लिखित क्विर्क से परहेज किया जाएगा।

+0

धन्यवाद, यह काम किया। मेरी समस्या का हिस्सा प्रत्येक कुंजी प्रेस पर AutoCompleteCustomSet पर साफ़() को भी कॉल कर रहा था। जाहिर है यह वास्तव में जरूरी नहीं है, और इसे नकारात्मक दुष्प्रभाव था। – Rich

0

क्या आप सिर्फ तालिका से शीर्ष 50 चुन सकते हैं ...?

0

क्या आपके सुझाव आपके लिए 50 काम सीमित कर देंगे? जब अपने अपने सुझाव का चयन करते समय इस तरह एक क्वेरी का उपयोग कर सकते हैं:

चयन टॉप 50 * YourTable कहाँ से .....

0

कारण आप दुर्घटना हो सकता है कि आप get a race condition जब स्वत: पूर्ण स्रोत है, जो एक पृष्ठभूमि धागा द्वारा किया जाता है उम्मीदवारों की गणना करने, जबकि आप टाइप कर रहे की जगह (या आप उम्मीदवार सूची में String.Empty के बजाय अशक्त कर दिया) प्राप्त

विंडोज विस्टा से पहले, स्वत: पूर्ण ऑब्जेक्ट match candidates with prefix only, तो टाइप किए गए स्ट्रिंग से शुरू नहीं होने वाले उम्मीदवार स्ट्रिंग्स को पॉप्युलेट न करें।

Use IAutoCompleteDropDown::ResetEnumerator to reset the candidate list

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