2012-06-05 7 views
9

मेरे पास निम्न डेटा के साथ डेटाग्रिडव्यू है। "ईमेल भेजने के लिए क्लिक करें"Winforms में हाइपरलिंक सेल DataGridView

ContactType  |  Contact 
------------------------------------ 
Phone    |  894356458 
Email    |  [email protected] 

यहाँ, मैं डेटा "[email protected]" एक टूलटिप के साथ, एक हाइपरलिंक के रूप में प्रदर्शित करने के लिए की जरूरत है। संख्या डेटा "894356458" में हाइपरलिंक नहीं होना चाहिए।

कोई विचार ???

टीआईए!

+0

मैं अपने जवाब संपादित किया है, कैसे बेहतर करने के साथ ही इस सवाल का जवाब जहां आप पाठ स्तंभ रखने पर एक दूसरे भिन्नता की पेशकश (एक स्तंभ छुपा और DataPropertyName का उपयोग करके) अपने मामले में मेरी पहली विकल्प का उपयोग करने समझा। –

उत्तर

18

DataGridView इस के लिए एक कॉलम प्रकार है, DataGridViewLinkColumn

DataGridViewLinkColumn col = new DataGridViewLinkColumn(); 
col.DataPropertyName = "Contact"; 
col.Name = "Contact";  
dataGridView1.Columns.Add(col); 

तुम भी ऑटोजनरेटेड पाठ स्तंभ के संपर्क संपत्ति से आता है छुपाना चाहते हैं जाएगा:

आप इस कॉलम को मैन्युअल टाइप करें, जहां DataPropertyName स्तंभ ग्रिड का डेटा स्रोत में करने के लिए बाध्य करने के लिए सेट DataBind करने की जरूरत है ग्रिड।

साथ ही, DataGridViewButtonColumn के साथ आपको CellContentClick ईवेंट का जवाब देकर उपयोगकर्ता इंटरैक्शन को संभालने की आवश्यकता है।


तो कक्ष मान कि सादा पाठ के लिए हाइपरलिंक आप पाठ बॉक्स सेल के साथ लिंक कोशिका प्रकार प्रतिस्थापित करने की आवश्यकता नहीं कर रहे हैं बदलने के लिए। उदाहरण में नीचे मैं DataBindingComplete घटना के दौरान ऐसा करने के बाद:

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    foreach (DataGridViewRow r in dataGridView1.Rows) 
    { 
     if (!System.Uri.IsWellFormedUriString(r.Cells["Contact"].Value.ToString(), UriKind.Absolute)) 
     { 
      r.Cells["Contact"] = new DataGridViewTextBoxCell(); 
     } 
    } 
} 

तुम भी एक DataGridViewLinkCell को DataGridViewTextBoxCell मैं इस दूसरे के बाद आप आवेदन करना होगा सुझाव है कि दूसरी दिशा से ऐसा कर सकते हैं, बदल रहा है कोई भी परिवर्तन जो प्रत्येक सेल के सभी लिंक पर लागू होता है।

यह लाभ है हालांकि आपको स्वत: उत्पन्न कॉलम को छिपाने की आवश्यकता नहीं होगी, इसलिए आपको सबसे अच्छा लगा सकता है।

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    foreach (DataGridViewRow r in dataGridView1.Rows) 
    { 
     if (System.Uri.IsWellFormedUriString(r.Cells["Contact"].Value.ToString(), UriKind.Absolute)) 
     { 
      r.Cells["Contact"] = new DataGridViewLinkCell(); 
      // Note that if I want a different link colour for example it must go here 
      DataGridViewLinkCell c = r.Cells["Contact"] as DataGridViewLinkCell; 
      c.LinkColor = Color.Green; 
     } 
    } 
} 
+0

एक तरफ के रूप में - डेटाग्रिडव्यू के साथ एक अच्छी बात यह है कि सेल सामग्री का जवाब देते समय क्लिक करें जब आप फ़ोन नंबर पर क्लिक करते समय वीओआईपी सेवा खोलने की तरह कुछ कर सकते हैं। –

+0

वैकल्पिक रूप से, क्या आप रिवर्स नहीं कर सकते? डिफ़ॉल्ट रूप से अपने ग्रिड को परिभाषित करें (टेक्स्टबॉक्ससेल) जैसा कि आप सामान्य रूप से करेंगे, फिर प्रत्येक पंक्ति में इच्छित सेल (सेल) को हाइपरलिंक करें? बस सोच रहा है कि आपने लिंककल्स को डिफॉल्ट क्यों किया है, फिर स्पष्ट रूप से टेक्स्टबॉक्स –

+1

@ बैरेट में बदल दिया गया है, हाइपरलिंक कॉलम में कुछ अतिरिक्त गुण और व्यवहार हैं जो आसान हैं, जैसे विज़िट लिंक रंग और ट्रैकविज़िटस्टेट - सुनिश्चित करें कि आप इसे दूसरी तरफ कर सकते हैं लेकिन मुझे लगता है रास्ता अधिक सुविधाजनक है। –