Theory
एक List, कई Rows, कोई Copy-Paste नहीं
FestConnect के पास events की एक list है, शायद 30, और हर एक को screen पर एक row चाहिए: name, date, venue। आप 30 blocks HTML hand-write नहीं करने वाले, और आप certainly हर बार event list बदलने पर इन्हें re-edit नहीं करेंगे।
इसकी बजाय आप पूरी list एक control को हाथ में देते हैं और इसे आपके लिए हर row draw करने देते हैं। यही data binding है: data के एक source को एक control से connect करना जो इसे display करता है। Underlying list बदलिए और display follow करता है। यह lesson data binding और इसे इस्तेमाल करने वाले main controls cover करता है: GridView, ListBox, Repeater और FormView।
Theory
Data Binding कैसे काम करता है
Pattern हमेशा same दो steps है। आप control का DataSource अपने data पर set करते हैं (एक list, एक DataTable, एक query के results), फिर आप DataBind() call करते हैं। Control data के through walk करता है और per item एक entry render करता है।
यही पूरा idea है: इसे data दीजिए, इसे bind करने के लिए कहिए, और यह display build करता है। अगर data में 5 events हैं, आपको 5 rows मिलती हैं; अगर 50 हैं, आपको 50 मिलती हैं, आपके code में कोई change के बिना। Control repetition handle करता है तो आपको नहीं करना पड़ता।
Practical
Binding the FestConnect event list to a GridView
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 'events' could come from a database; a list is shown here for clarity
var events = GetEvents(); // e.g. a list of Event objects
gvEvents.DataSource = events; // 1) point the control at the data
gvEvents.DataBind(); // 2) render one row per item
}
}
// gvEvents is an <asp:GridView> in the markup. It now shows every event.At a glance
| Control | क्या दिखाता है | Layout Control |
|---|---|---|
| GridView | एक grid: rows और columns, एक table की तरह | Built in; sorting और paging support करता है |
| ListBox | Selectable items की एक scrollable list | Simple list; user pick कर सकता है |
| Repeater | जो भी HTML template आप लिखें, repeated | Total: आप template supply करते हैं, कोई default नहीं |
| FormView | एक बार में एक record, आपका template | एक item, fully custom layout |
Formula
DataBind() और Per-Item Events
जब तक आप DataBind() call न करें कुछ नहीं दिखता; अकेले DataSource set करना कुछ render नहीं करता। Bind करना याद रखिए (typically if (!IsPostBack) के अंदर, तो grid हर click पर needlessly rebuild नहीं होता)।
जैसे एक control bind होता है, यह data-binding events raise कर सकता है, per item एक। एक GridView का RowDataBound हर row के लिए fire होता है जैसे यह built होती है, आपको इसे customise करने देते हुए: उदाहरण के लिए, एक 'Full' event को red colour कीजिए, या एक date format कीजिए। ये events binding के दौरान individual items adjust करने के लिए आपका hook हैं।
Quiz
आप FestConnect के events को minimal effort के साथ columns, sorting, और paging वाली एक table की तरह दिखाना चाहते हैं। कौन सा control सबसे अच्छा fit होता है?
- Repeater, क्योंकि इसमें सबसे ज़्यादा built-in table features हैं
- GridView, जो rows और columns को एक grid की तरह render करता है और out of the box sorting और paging support करता है
- FormView, क्योंकि यह सारे records को एक grid की तरह दिखाता है
- ListBox, क्योंकि यह automatically columns display करता है
Show the answer
GridView, जो rows और columns को एक grid की तरह render करता है और out of the box sorting और paging support करता है
GridView tabular grid control है: यह rows और columns render करता है और इसमें built-in sorting और paging है, तो यह least effort के साथ events की एक table को fit करता है। Option A backwards है: Repeater के पास बिल्कुल कोई built-in layout नहीं है; आपको पूरा template खुद लिखना पड़ता है, जो एक standard table के लिए minimal effort का opposite है। Option C wrong है क्योंकि FormView एक बार में ONE record दिखाता है, इन सबकी एक grid नहीं। Option D wrong है: एक ListBox selectable items की एक single-column scrollable list है, एक multi-column grid नहीं। Control को display के shape से match कीजिए: कई rows का grid -> GridView।
Think first
तो आप GridView की बजाय Repeater कब चुनेंगे?
अगर GridView इतना automatically करता है, Repeater, जो default से आपको कुछ नहीं देता, बिल्कुल exist क्यों करता है? फिर tap कीजिए।
Show the answer
आप एक Repeater तब चुनते हैं जब आपको HTML पर COMPLETE control चाहिए और grid की built-in table structure नहीं चाहिए। एक GridView quick है पर यह अपने खुद के markup वाली एक table render करता है, जो एक spreadsheet-जैसे grid के लिए great है पर limiting है अगर आप चाहें, मान लीजिए, हर event एक styled card की तरह दिखे, या divs की एक custom list, या markup जो एक specific design में fit हो। Repeater exactly वह template render करता है जो आप लिखते हैं, per item एक बार, और कुछ और नहीं: कोई automatic table नहीं, कोई extra tags नहीं। वह freedom point है। Trade-off effort और features हैं: एक Repeater के साथ आप सारी layout खुद लिखते हैं और आपको free sorting या paging नहीं मिलती। तो rule है: least work वाले एक standard data grid के लिए GridView; जब design custom markup demand करे और आप इसे लिखने में खुश हों तब Repeater। FormView एक single record के लिए same idea है। सही tool, सही shape।
Summary
Key takeaways
- Data binding एक data source को एक control से connect करता है जो automatically हर item display करता है।
- Pattern दो steps है: control का DataSource set कीजिए, फिर DataBind() call कीजिए; जब तक आप bind न करें कुछ render नहीं होता।
- GridView built-in sorting और paging वाली rows और columns की एक grid दिखाता है।
- ListBox selectable items की एक scrollable list है; Repeater आपके लिखे एक fully custom template को per item render करता है; FormView एक बार में एक record को एक custom template के साथ दिखाता है।
- GridView के RowDataBound जैसे data-binding events per item fire होते हैं, आपको हर row को built होते वक़्त customise करने देते हुए।
- if (!IsPostBack) के अंदर bind कीजिए तो control हर postback पर needlessly rebuild नहीं होता।
- Memory hook: DataSource + DataBind() = control आपके लिए हर row draw करता है।