2008-09-24 15 views
11

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

क्या कोई भी क्रिस्टल रिपोर्ट के इस संस्करण के साथ इसे पूरा करने में सक्षम है?

उत्तर

7

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

संपादित करें: यह ध्यान देने योग्य बात आप सादे पुराने ऑब्जेक्ट में अपने क्रिस्टल रिपोर्ट बाध्यकारी हैं यदि आप रिपोर्ट के इलाज के लिए है कि एक छवि के रूप के लिए एक बाइट [] संपत्ति का खुलासा करना चाहते हैं लायक है।

+0

मैं www.aspfree.com/c/a/C-Sharp/Crystal-Reports-for-Visual-Studio-2005-in-CSharp/ प्रति सी # कक्षा का उपयोग कर रहा हूं। मुझे सैकड़ों फ़ील्ड के साथ एक जटिल, कस्टम तैयार रिपोर्ट मिली है। मुझे यहां से एक अच्छा रास्ता नहीं दिख रहा है। मैंने देखा: codeguru.com/csharp/.net/net_general/toolsand3rdparty/article.php/c13253। –

+0

यदि आप क्रिस्टल रिपोर्ट को सादे पुरानी वस्तुओं पर बाध्य कर रहे हैं, तो बस एक बाइट [] संपत्ति का पर्दाफाश करें। सीआर एक छवि के रूप में देखेंगे। –

+0

यूरेका! मैंने एक "बिटमैप" संपत्ति की कोशिश की थी, लेकिन मैंने जो पढ़ा है, उसमें बाइट [] सीआर चाल चलाना नहीं था। –

1

एक पैरामीटर छवि का पथ और इस पृष्ठ पर ट्यूटोरियल युक्त का उपयोग कर के संयोजन का उपयोग का प्रयास करें: http://www.idautomation.com/crystal/streaming_crystal.html

फिर कदम # 8 में, पैरामीटर के बजाय एक हार्ड-कोडेड पथ का उपयोग करें।

+0

धन्यवाद लेकिन इस समाधान की तुलना में हम प्रयोग कर रहे हैं क्रिस्टल के एक नए संस्करण के लिए है। हमारे पास छवि नियंत्रण गुणों में ग्राफ़िक स्थान बटन नहीं है। – Keith

+0

हाँ, यह केवल सीआर 11 और ऊपर में काम करेगा। – dotjoe

+0

अन्य @ केथ के विपरीत - मैं सीआर 11.5 का उपयोग कर रहा हूं और वह मार्ग अभी भी काम नहीं करता है। छवि मूल से कभी नहीं बदलती है। – Keith

2

मुझे यह प्रश्न भी था (और आपका वोट दिया गया)!

[मुझे तब से एक सी # ऑब्जेक्ट प्रॉपर्टी के माध्यम से बाइट सरणी का उपयोग करके समाधान मिला है - अलग उत्तर देखें। संदर्भ के लिए यहां इस उत्तर को छोड़कर ...]

यहां मैंने जो सुझाव देखा है (लेकिन मैंने कोशिश की और सी # -2005 और सी # -2008 दोनों में विफल रहा)।

  1. एक निर्देशिका चुनें और वहां एक बीएमपी रखें (उदाहरण के लिए, "सी: \ Temp \ image.bmp")।
  2. सीआर-डिजाइनर से ए) राइट-क्लिक-> सम्मिलित करें-> ओएलई ऑब्जेक्ट ... बी) "फ़ाइल से बनाएं" चुनें c) "लिंक" चेकबॉक्स की जांच करें डी) चरण 1 में परिभाषित बीएमपी ब्राउज़ करें और चुनें ई) ठीक क्लिक करें एफ) छवि को फॉर्म पर रखें।
  3. अपने सी # कोड में रनटाइम पर छवि को ओवरराइट/अपडेट करें। सिद्धांत रूप में, चूंकि आपने एक छवि फ़ाइल में लिंक डाला है, इसलिए फ़ॉर्म को रीफ्रेश होने पर अपडेट किया जाएगा।

मुझे इस दृष्टिकोण के साथ कोई भाग्य नहीं था। छवि तब प्रकट होती है जब मैं पहली बार फॉर्म (चरण 2) डिज़ाइन करता हूं। लेकिन रनटाइम पर, छवि मेरे लिए अपडेट नहीं होती है। इस बिंदु से आगे, चीजें वास्तव में अजीब मिलती हैं। ऐसा लगता है कि सीआर कुछ प्रकार की छवि कैश करता है जो अभी नहीं चलेगा। मैं सीआर-डिजाइनर में ओएलई ऑब्जेक्ट लिंक को हटा सकता हूं, लेकिन अगर मैं इसे फिर से बना देता हूं, तो मुझे हमेशा मूल छवि के समान आकार का काला बॉक्स मिलता है (भले ही मैं image.bmp का आकार बदलूं)।

+0

सुनिश्चित नहीं है कि "लिंक" विकल्प क्या करता है। मैंने हमेशा सोचा था कि सम्मिलन तस्वीर में तस्वीर को एम्बेड करेगा। – dotjoe

+0

उस चेकबॉक्स के लिए "यह क्या है" सहायता के अनुसार, यह छवि को एम्बेड करने या उससे लिंक करने का विकल्प है। मैं इकट्ठा करता हूं कि यह एक फ़ाइल के लिए एक विंडो "शॉर्टकट" के समान है (या यूनिक्स में एक फाइल सिस्टम लिंक)। अगर यह छवि को एम्बेड नहीं कर रहा है, तो यह सुनिश्चित करता है कि इसे काम करना चाहिए। –

+0

वीबी.नेट वीएस 2010 में भी विफल रहता है, @ ई-होल्डर - मूल छवि हमेशा रहता है। – Keith

0

बस जोश ने कहा .. आपको छवि को डेटासेट के साथ धक्का देना होगा। या, छवि को एक बार डेटाबेस तालिका में डाल दें और इसे सबरेपोर्ट के साथ कई बार खींचें।

2

मैं अंततः जोश द्वारा पोस्ट की गई byte[] टिप का उपयोग करके एक समाधान पर पहुंच गया।

यह समाधान लागू होता है यदि आप अपनी क्रिस्टल रिपोर्ट्स को पॉप्युलेट करने के लिए एक सादे पुराने सी # ऑब्जेक्ट का उपयोग कर रहे हैं (इस दृष्टिकोण पर जानकारी के लिए http://www.aspfree.com/c/a/C-Sharp/Crystal-Reports-for-Visual-Studio-2005-in-CSharp/ देखें)।अब

private static byte[] m_Bitmap = null; 

public byte[] Bitmap 
{ 
    get 
    { 
     FileStream fs = new FileStream(bitmapPath, FileMode.Open); 
     BinaryReader br = new BinaryReader(fs); 
     int length = (int)br.BaseStream.Length; 
     m_Bitmap = new byte[length]; 
     m_Bitmap = br.ReadBytes(length); 
     br.Close(); 
     fs.Close(); 
     return m_Bitmap; 
    } 
} 

, "डाटाबेस सत्यापित करें" विकल्प का उपयोग सीआर में अपनी सी # ऑब्जेक्ट मानचित्रण अद्यतन:

अपने सी # कक्षा में, निम्नलिखित कोड डालें। आपको Bitmap संपत्ति को सीआर फ़ील्ड के रूप में देखना चाहिए। बस इसे फॉर्म पर खींचें। यह IBlobFieldObject प्रकार का होगा। जब आप दौड़ते हैं, तो आपको अपनी छवि देखना चाहिए।

+0

यह वीबीएनईटी में कैसे किया जाएगा? – Keith

+0

क्रिस्टल या वीबी का उपयोग करने के बाद से काफी समय बीत गया। पता नहीं है कि मैं मदद कर सकता हूं। इसका क्या हिस्सा आपको वीबी में अनुवाद करने में मदद की ज़रूरत है? बाइट सरणी? धाराओं/पाठकों? संपत्ति? सीआर में ऑब्जेक्ट मैपिंग? –

+0

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

1

आप छवि के स्थान को सेट करने के लिए एक सशर्त सूत्र का भी उपयोग कर सकते हैं। Crystal Reports: Dynamic Images देखें।

+0

आपका लिंक खाली है :( – programmerist

+0

विचित्र।यह एक वर्डप्रेस चीज होना चाहिए। यह अब काम करता है। – craig

1

एक और विकल्प जो मैंने उपयोगी पाया है वह चित्रों को सम्मिलित कर रहा है जिन्हें आप उपयोग करना चाहते हैं। ग्राफिक को तदनुसार स्थिति दें, फिर ग्राफ़िक पर राइट-क्लिक करें और ग्राफ़िक> सामान्य प्रारूप पर जाएं। दबाने वाले बॉक्स को चेक करें, फिर एक्स-2 के रूप में दिखाए गए फॉर्मूला बटन पर क्लिक करें। फ़ॉर्मूला विंडो में एक बार, यह निर्धारित करने के लिए कोड जोड़ें कि ग्राफ़िक को दबाया जाना चाहिए या नहीं।

मेरे मामले में, मैं एकाधिक इकाइयों के लिए एक चालान टेम्पलेट का निर्माण कर रहा था। फॉर्मूला विंडो में, मैंने बस कंपनी <> 1100 लिखा था जिसका मतलब था कि हर बार चालान 1100 के अलावा किसी कंपनी के लिए चलाया जाता था, 1100 ग्राफ़िक दबाया जाएगा।

उम्मीद है कि इस बनाता है जीवन को आसान ...