में डायनामिक कॉलम जोड़ना मुझे गतिशील रूप से ग्रिड व्यू में कॉलम जोड़ने में कोई समस्या है। मुझे लेआउट को बदलने की आवश्यकता है - यानी शामिल कॉलम - ड्रॉपडाउनलिस्ट में मान के आधार पर। जब उपयोगकर्ता इस सूची में चयन को बदलता है, तो मुझे पहले कॉलम के अलावा सभी को हटाने की आवश्यकता होती है और चयन के आधार पर गतिशील रूप से अतिरिक्त कॉलम जोड़ना पड़ता है।एएसपी.NET ग्रिडव्यू
मेरे पास मेरे मार्कअप - कॉलम 0, टेम्पलेट कॉलम में केवल एक कॉलम परिभाषित किया गया है, जिसमें मैं एक चयन लिंक और अन्य एप्लिकेशन विशिष्ट लिंकबटन घोषित करता हूं। उस कॉलम को हमेशा वहां रहने की जरूरत है। जब ListBoxSelection बनाया जाता है, तो मैं पहले कॉलम के अलावा सभी को हटा देता हूं और फिर वांछित कॉलम को दोबारा जोड़ता हूं (इस नमूने में, मैंने हमेशा इसे "शीर्षक" कॉलम जोड़ने के लिए सरल बना दिया है)। यहाँ कोड का एक हिस्सा है:
RemoveVariableColumnsFromGrid();
BoundField b = new BoundField();
b.DataField = "Title";
this.gvPrimaryListView.Columns.Add(b);
this.gvPrimaryListView.DataBind();
private void RemoveVariableColumnsFromGrid() {
int ColCount = this.gvPrimaryListView.Columns.Count;
//Leave column 0 -- our select and view template column
while (ColCount > 1) {
this.gvPrimaryListView.Columns.RemoveAt(ColCount - 1);
--ColCount;
}
}
पहली बार इस कोड के माध्यम से चलाता है, मैं दोनों स्थिर स्तंभ और गतिशील रूप से जोड़ा "शीर्षक" कॉलम देखें। हालांकि, अगली बार चयन किया जाता है, पहला कॉलम खाली होता है (इसमें कुछ भी नहीं)। मुझे शीर्षक कॉलम दिखाई देता है, और मैं इसके बाईं ओर पहला कॉलम देखता हूं - लेकिन इसमें कुछ भी उत्पन्न नहीं होता है। डीबगर में, मैं देख सकता हूं कि gvPrimaryListView में वास्तव में अभी भी दो कॉलम हैं और पहला (इंडेक्स 0) वास्तव में एक टेम्पलेट कॉलम है। वास्तव में, कॉलम भी इसकी चौड़ाई को बरकरार रखता है जो नीचे दिए गए मार्कअप में 165 पीएक्स के रूप में सेट किया गया है (डीबगिंग उद्देश्यों के लिए)।
कोई विचार?
<asp:GridView ID="gvPrimaryListView" runat="server" Width="100%" AutoGenerateColumns="false"
DataKeyNames="Document_ID" EnableViewState="true" DataSourceID="odsPrimaryDataSource"
AllowPaging="true" AllowSorting="true" PageSize="10" OnPageIndexChanging="activeListView_PageIndexChanging"
AutoGenerateSelectButton="False" OnSelectedIndexChanged="activeListView_SelectedIndexChanged"
Visible="true" OnRowDataBound="CtlDocList_RowDataBound" Font-Size="8pt" Font-Names="Helvetica">
<Columns>
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:LinkButton EnableTheming="false" ID="CtlSelectDocRowBtn" runat="server" Text="Select"
CommandName="Select" CssClass="gridbutton" OnClick="RowSelectBtn_Click" />
<asp:ImageButton EnableTheming="false" ID="DocViewBtn" runat="server" ImageUrl="../../images/ViewDoc3.png"
CssClass="gridbutton" CommandName="Select" OnClick="DocViewBtn_Click" />
</ItemTemplate>
<ItemStyle Width="165px" />
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
<asp:Label ID="Label6" runat="server" Text="No rows found." SkinID="LabelHeader"></asp:Label>
</EmptyDataTemplate>
</asp:GridView>
बस कुछ अतिरिक्त जानकारी।
इस तथ्य से कोई लेना-देना नहीं है कि यह पहला कॉलम है लेकिन इस तथ्य के साथ सबकुछ करना है कि यह एक टेम्पलेटफिल्ड है। अगर मैं बाईं ओर एक सामान्य कॉलम डालता हूं (मार्कअप में) और टेम्पलेटफ़िल्ल्ड कॉलम को दाईं ओर स्थानांतरित करता हूं, तो पहला कॉलम ठीक से प्रस्तुत करता है, और (अब दूसरा) टेम्पलेटफ़िल्ल्ड कॉलम गायब हो जाता है।
एक और अजीब बात - समस्या पहली पोस्टबैक नहीं होती है - या दूसरा - लेकिन यह तीसरे पोस्टबैक पर शुरू होता है और फिर बाद के पोस्टबैक के लिए जारी रहता है। मैं उलझन में हूं।
मैं एक ही कर रहा हूँ गतिशील कोड में कॉलम जोड़ने का तरीका पीछे, हालांकि, समस्या यह है कि यदि मैं 20+ कॉलम गतिशील रूप से जोड़ता हूं, तो प्रत्येक लूप पूरे पृष्ठ को धीमा कर देता है, क्या आपके पास एक ही समस्या है? – Princa