2009-06-11 15 views
16

सरल सवाल, मुझे लगता है।डेटाबिंड() विधि क्यों आवश्यक है?

लंबे समय तक मैंने अंधाधुंध (एएसटी) सामान्य पैटर्न का पालन किया है जब प्रोग्रामिंग रूप से मेरे एएसपी.NET नियंत्रणों को डाटाबेसेट किया जा रहा है। अर्थात्:

gridView1.DataSource = someList; 
gridView1.DataBind(); 

हालांकि, अगर मैं मेरे GridView की स्थापना कर रहे थे DataSourceID संपत्ति के माध्यम से एक डेटास्रोत नियंत्रण करने के लिए बाध्य करने के लिए, DataBind करने के लिए कॉल() अनावश्यक है। अर्थात्:

gridView1.DataSourceID = LinqDataSource1; 

पर्याप्त है।

इसके अलावा, अगर आप ASPX मार्कअप में डेटा स्रोत गुण सेट करने के लिए प्रयास करते हैं, तो आपको निम्न के साथ स्वागत कर रहे हैं:

आप डेटा स्रोत संपत्ति एलान के तौर पर निर्धारित नहीं कर सकते।

मुझे लगता है कि ये संबंधित हैं, लेकिन मैं अभी भी स्टंप हूं कि डेटाबिंड() आवश्यक क्यों है। डेटासोर्स और डेटासोर्सिड के बीच का अंतर माध्यमिक है - मैं वहां कुछ जादू लेने वाला समझ सकता हूं। असली सवाल डेटासोर्स प्रोपेरी सेटर स्वचालित रूप से डाटाबेसिंग क्यों नहीं करता है? क्या कोई परिदृश्य है जिसमें हम डेटासोर्स सेट करना चाहते हैं लेकिन इससे बंधे नहीं हैं?

उत्तर

16

एएसपी.Net में, पृष्ठ जीवन चक्र में कुछ बिंदुओं पर उपलब्ध कुछ निश्चित डेटा उपलब्ध कराने के लिए अक्सर महत्वपूर्ण होता है, और इससे पहले नहीं। उदाहरण के लिए, बाद में उस सूची में चयनित इंडेक्स को सेट करने की अनुमति देने के लिए आपको ड्रॉप डाउन सूची में बाध्य करने की आवश्यकता हो सकती है। या हो सकता है कि आप उस बड़े ग्रिड को बांधने के लिए थोड़ा इंतजार करना चाहें, उस समय को कम करने के लिए जो उस कनेक्शन को सक्रिय करता है/डेटा को स्मृति में रखें।

आप स्पष्ट रूप से .DataBind() विधि को कॉल करने के लिए स्पेक्ट्रम के दोनों सिरों पर परिदृश्यों का समर्थन करना संभव बनाता है।

+2

आप व्याख्या कर सकते हैं कि कैसे बाध्यकारी बाद में मेमोरी में डेटा को ध्यान में रखते हुए कम समय का कारण बनता है?मैं स्मृति में रखे गए एक साधारण संग्रह के लिए मानता हूं (जैसा ऊपर है, अगर कुछ सूची सूची है) इसमें कोई फर्क नहीं पड़ता है, लेकिन यह कुछ और जटिल के लिए कैसे काम करता है? क्या मूल्यांकन में देरी हुई है? एक उदाहरण उत्कृष्ट होगा। – JoshJordan

+0

स्रोत के रूप में एक datareader का उपयोग करने के बारे में सोचो। यदि आप तुरंत बाध्य करते हैं, तो आप पाठक पर पुन: प्रयास करेंगे और उन सामग्रियों को स्मृति में रखें। यदि आप पेज लाइफसाइक्ल में बाद में प्रतीक्षा करते हैं, तो आप कम समय के लिए इसे लटकाते हैं। –

+1

स्पष्टीकरण के लिए धन्यवाद, हालांकि मुझे समझ में नहीं आता कि यह आपके द्वारा कनेक्शन को सक्रिय रखने में कितना समय कम करता है? कनेक्शन केवल तब खुला होता है जब ExecuteSelect() को OnDataBinding ईवेंट से कॉल किया जाता है। जब निष्पादित करें() समाप्त होता है तो इसे 'dbConnection.Close();' कहते हैं और कनेक्शन अब सक्रिय नहीं है। क्या मैं कुछ भूल रहा हूँ? – BornToCode

2

डेटासोर्स बेसडेटाबाउंड नियंत्रण श्रेणी की एक संपत्ति है। DataSourceID DataBoundControl क्लास की एक संपत्ति है, जो बेसडेटाबाउंड नियंत्रण से प्राप्त होती है और एएसपी.NET 2.0 से पहले मौजूद नहीं थी।

चूंकि डेटाबाउंड कंट्रोल स्पष्ट रूप से किसी सूची या टैब्यूलर रूप में डेटा प्रदर्शित करने के लिए है, और बेसडाटाबाउंडकंट्रोल उस धारणा को नहीं बना सकता है, डेटासॉर्स सेट होने पर बाध्यकारी स्वचालित नहीं है क्योंकि नियंत्रण का प्रकार डेटा की संरचना से मेल नहीं खाता है।

बेशक, यह सिर्फ एमएसडीएन दस्तावेज के आधार पर अनुमान है, इसलिए मैं गलत हो सकता था।

0

मैंने देखा है कि DataBind() कि मेरे GridView में कुछ भी नहीं प्रदर्शित किया जाएगा का उपयोग किए बिना तो मैं हमेशा यह शामिल के रूप में कोड के इस हिस्से में दिखाया गया है:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    ' TableAdapter object. 
    ' Provide communication between this application and the database. 
    '----------------------------------------------------------------- 
    Dim suppliersAdapter As New SuppliersTableAdapter 

    ' Get the data from the TableAdapter into the GridView. 
    '------------------------------------------------------ 
    GridView1.DataSource = suppliersAdapter.GetSuppliers() 

    ' Display the result set from the TableAdapter in the GridView. 
    '-------------------------------------------------------------- 
    GridView1.DataBind() 
End Sub 

कृपया माफ कर दो अतिरिक्त टिप्पणी के रूप में मैं भी कर रहा हूँ अभी भी एएसपी.Net सीखना और टिप्पणियां मुझे कुछ बयानों का उपयोग करने के लिए "क्या और क्यों" बेहतर सीखने में मदद करेंगी।

0

इस प्रयास करें:

if (GridView1.EditIndex == e.Row.RowIndex) 
{    
    TextBox t2 = (TextBox)e.Row.FindControl("TextBox2"); 
    DateTime dt2; 
    if (DateTime.TryParse(t2.Text, out dt2)) 
    { 
     t2.Text = dt2.ToString("yyyy-MM-dd"); 
    } 
} 
संबंधित मुद्दे