2011-03-04 17 views
5

हमारे पास एक एसक्यूएल पूर्णांक मान से जुड़ा एक कॉलम है जो शून्य है। जब उपयोगकर्ता DataGrid में सेल को "साफ़" करने का प्रयास करता है, तो हमें सत्यापन त्रुटि(डब्ल्यूपीएफ) डाटाग्रिड में आप सेल को कैसे साफ़ करते हैं (इसलिए इसे पूर्ण मान मिलता है)?

"... परिवर्तित नहीं किया जा सका"।

मैं इसे खाली कैसे कर सकता हूं और अंतर्निहित कॉलम को "शून्य" मान कैसे बांध सकता हूं?

मैंने इस समस्या को दो दिनों के लिए गुगल किया है और कुछ भी मिला है। मैंने एचसीएल को आपकी टिप्पणी संपादित करने की कोशिश की, लेकिन यह कभी नहीं बचाएगा।

मैं IValueConverters से परिचित हूं। मैंने अपने प्रतिशत को संभालने के लिए एक लिखा है (इसलिए उपयोगकर्ता "50%" दर्ज कर सकता है और इसे ".5" में परिवर्तित कर दिया जाता है)। मैं कुछ ऐसा ही करने की कोशिश कर रहा हूं, लेकिन जब मान Null के रूप में वापस आता है (मैंने इसे डीबग करने के लिए एक डमी IValueConterter लिखा था), मैं बस इसे Null के रूप में डेटाबेस में सहेजना चाहता हूं। शायद मुझे इसे DBNullValue पर सेट करने की आवश्यकता है? ऐसा लगता है कि ऐसा कुछ ऐसा लगता है जो मुझे लगता है कि संपत्ति में निर्मित हो सकता है। मैं स्तंभ (DataGridBoundColumn) और DBNull.Value है कि स्थापित करने पर TargetNullValue संपत्ति का उपयोग कर की कोशिश की है, लेकिन यह मूल्य (मेरी डमी IValueConverter यह अभी भी एक नियमित रूप से (स्ट्रिंग के रूप में में आ रहा है) NULL

मैं के आधार पर परिवर्तन नहीं किया बस इस (पूर्णांक प्रकार) स्तंभ के लिए डेटाबेस के लिए एक शून्य मान बचाने में सक्षम होना चाहता हूँ।

** नवीनतम इसके अलावा **

अच्छा बिंदु एचसीएल, मैं भूल जाते हैं कि पूरी दुनिया कभी कभी हलचल नहीं है

मैं बाध्यकारी हूं एक एसक्यूएल टेबल। प्रश्न में कॉलम int है जो NULL एस की अनुमति देता है।

कॉलम AutoGeneratingColumn का उपयोग करके बनाए गए हैं, इसलिए यह मूल रूप से उन्हें "स्वचालित रूप से" हुक करता है (इस विधि में राइट जस्टिफ़ाई जैसी कुछ शैलियों को लागू किया जाता है, लेकिन इस कॉलम के लिए नहीं)। यह इस दृष्टिकोण को लेता है, क्योंकि ऐप काफी "एक्सेस" प्रतिस्थापन है। हमारे सीआईओ ने जरूरी है कि हम उपयोगकर्ताओं से एक्सेस हटा दें, इसलिए यह समाधान था (अपना स्वयं का एमएस एक्सेस बनाएं)। वैसे भी, चूंकि यह किसी भी तालिका को खोल सकता है (और टेबल, कॉलम इत्यादि बना सकता है) यह खोले गए तालिका के आधार पर कॉलम को "स्वत: उत्पन्न करता है"। हालांकि, चूंकि कुछ कॉलम हैं जिन्हें ऐप स्वाभाविक रूप से डिस्काउंट_Pct के बारे में जानता है, जब यह उन स्तंभों में से एक का सामना करता है, तो यह कुछ "विशेष सामान" करता है (जैसे ऊपर वर्णित IValueConverter असाइन करें)। हालांकि, जैसा कि मैंने कहा ... इस विशेष कॉलम के लिए, इसमें कुछ भी "विशेष" नहीं किया गया है। यह सिर्फ एक नियमित एसक्यूएल पूर्णांक (शून्य) है जो "स्वतः उत्पन्न" है।

+0

क्या हम सत्यापन कोड देख सकते हैं? – SQLMason

+0

कोई नहीं है। यह एक सुंदर वेनिला ग्रिड है। – Shayne

उत्तर

6

मैं सिर्फ संपत्ति मैं खोज रहा था पाया !!

TargetNullValue

इस पोस्ट में यह बताते हैं: HERE

समस्या है, ये कॉलम "AutoGenerateColumns" (क्योंकि डेटा स्रोत ... एक एसक्यूएल तालिका ... "डायनामिक" है) का उपयोग कर उत्पन्न कर रहे हैं। अगर मैं तालिका कॉलम (आदिम) प्रकार कैसे प्राप्त कर सकता हूं, तो मुझे पता चल सकता है कि यह कैसे पता चल सकता है कि यह शून्य है, तो मैं उस कॉलम के लिए यह मान सेट कर सकता हूं। (मुझे अभी भी समझ में नहीं आ रहा है कि AutoGenerateColumns स्वचालित रूप से इसे क्यों संभाल नहीं लेता है !!)

+0

मुझे पता है कि प्रकार कैसे प्राप्त करें ... यह ऑटो जेनरेट कॉलम हैंडलर को "ई। प्रॉपर्टी टाइप" के रूप में पास किया गया है। समस्या यह है कि यह वास्तव में "प्रकार" नहीं है ... यह शून्य नहीं है, फिर भी डेटाबेस कॉलम शून्य है। तो, मुझे कॉलम नाम से इसे कड़ी मेहनत करनी होगी। :( – Shayne

1

मैंने इस क्षेत्र के लिए भी IValueConverter मार्ग जाने का फैसला किया।

यहाँ मैं क्या लिखा है (और यह काम करता है, मैं अभी भी तरह वहाँ एक आसान तरीका होना चाहिए महसूस lol!):

[ValueConversion(typeof(Int32), typeof(String))] 
    public class IntDBNullConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (value == null) 
       return ""; 
      else if (DBNull.Value.Equals(value)) 
       return ""; 
      else 
       return value.ToString(); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      string str = value as string; 
      if (String.IsNullOrEmpty(str)) 
       return DBNull.Value; // returns DBNull.Value 

      Int32 result = 0; 

      Int32.TryParse(str, out result); 

      return result; 
     } 
    } 
3

शैने के स्वयं-उत्तर को विस्तारित करते हुए, मैंने पाया कि TargetNullValue प्रॉपर्टी DataGridBoundColumn ऑब्जेक्ट्स पर उपलब्ध है। आप इस सशर्त बनाने के लिए from this comment वर्णित अतिरिक्त तर्क का उपयोग कर सकते हैं।

<DataGrid AutoGenerateColumns="True" AutoGeneratingColumn="m_grid_AutoGeneratingColumn"/> 

और ...

public void m_grid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    // Make all columns nullable 
    ((DataGridBoundColumn)e.Column).Binding.TargetNullValue = string.Empty; 
} 

मैं इस समस्या से इतना निराश था: दुर्भाग्य से, उस पोस्ट की व्याख्या नहीं करता एक डेटा ग्रिड के लिए अपने तर्क से संबंधित करने के लिए कैसे, इसलिए यहां मेरे समाधान है। मुझे उम्मीद है इससे किसी को सहायता मिलेगी।

+1

धन्यवाद, हालांकि मेरी समस्या यह है कि मेरा डेटाग्रिडटेक्स्ट कॉलम लक्ष्यNullValue नहीं लेगा - वीएस का कहना है कि जब मैं । एएच! कोई बात नहीं, मुझे यह पता चला, यह होना चाहिए: Dronz

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