2011-03-21 14 views
60

मेरे पास DataSource (SQL डेटाबेस) के साथ एक ग्रिड व्यू है। मैं एक कॉलम छिपाना चाहता हूं, लेकिन जब भी मैं रिकॉर्ड का चयन करता हूं तब भी मूल्य तक पहुंचने में सक्षम हूं। क्या कोई मुझे दिखा सकता है कि यह कैसे करें?कॉलम (ग्रिड व्यू) को कैसे छुपाएं लेकिन फिर भी इसके मूल्य तक पहुंचें?

यह कॉलम मैं छुपाना चाहते है और अभी भी अपने मूल्य का उपयोग करना चाहते हैं:

<asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" /> 

मैं स्तंभ (संपत्ति Visible="false") को छिपाने के लिए सब कुछ करने की कोशिश की, लेकिन मैं अपने मूल्य का उपयोग नहीं कर सकते हैं।

उत्तर

40

यदि मुझे गलत नहीं है, तो GridViewBoundColumns के मान नहीं रखता है जिसमें विशेषता visible="false" है। Datakeys का उपयोग करने के लिए आप यहां दो चीजें कर सकते हैं, एक (जैसा कि V4Vendetta से उत्तर में बताया गया है)। या आप BoundColumn को TemplateField पर बदल सकते हैं। और ItemTemplate में, Label जैसे नियंत्रण जोड़ें, इसकी दृश्यता झूठी बनाएं और अपना मूल्य उस Label पर दें।

+6

यह कॉलम छुपाता है लेकिन यह कॉलम हेडर को छुपाता नहीं है। आप वो कैसे करेंगे? – Apollo

28

आप इस तरह के क्षेत्रों के मूल्य को वापस लाने के लिए DataKeys उपयोग कर सकते हैं, क्योंकि (जैसा कि आपने कहा था) एक सामान्य BoundField रूप में दिखाई दे उनके मूल्य झूठी आप नहीं मिल सकता है जब आप निर्धारित किया है।

.aspx फ़ाइल में GridView गुण सेट

DataKeyNames = "Outlook_ID" 

अब, एक ईवेंट हैंडलर में तुम इतनी तरह इस कुंजी का मान पहुँच सकते हैं:

grid.DataKeys[rowIndex]["Outlook_ID"] 

यह आप कम से आईडी दे देंगे ग्रिड के निर्दिष्ट rowindex।

+1

DataKeys जहां कि –

+0

के लिए कैसे होगा यह काम करता है, तो आप HTML में CRUD कोड के साथ डेटा स्रोत नियंत्रण का उपयोग कर रहे थे ...? –

10

आप एक TemplateField अपने GridView के कॉलम में है और यदि आप हैं, कहते हैं, एक नियंत्रण नामित blah यह करने के लिए बाध्य। तो फिर वहाँ एक HiddenField इस तरह के रूप में outlook_id जगह:

<asp:TemplateField HeaderText="OutlookID"> 
    <ItemTemplate> 
     <asp:Label ID="blah" runat="server">Existing Control</asp:Label> 
     <asp:HiddenField ID="HiddenOutlookID" runat="server" Value='<%#Eval("Outlook_ID") %>'/> 
    </ItemTemplate> 
</asp:TemplateField> 

अब, घटना में पंक्ति हड़पने आप outlook_id चाहते हैं और फिर नियंत्रण का उपयोग।
RowDataBound पहुँच के लिए इसे पसंद:

string outlookid = ((HiddenField)e.Row.FindControl("HiddenOutlookID")).Value; 

वापस मिलता है, यदि आप मुसीबत क्लिक किया पंक्ति तक पहुँचने की है। और उस घटना का उल्लेख करना न भूलें जिस पर आप इसे एक्सेस करना चाहते हैं।

4

GridView भरने से पहले दृश्यमान कॉलम छोड़ दें। GridView भरें और फिर कॉलम छुपाएं।

20

आप इसे प्रोग्राम के रूप में कर सकते हैं:

grid0.Columns[0].Visible = true; 
grid0.DataSource = dt; 
grid0.DataBind(); 
grid0.Columns[0].Visible = false; 

इस तरह से आप डेटा बाइंडिंग से पहले दिखाई करने के लिए स्तंभ सेट में, तो स्तंभ उत्पन्न होता है। आपने कॉलम को दृश्यमान करने के लिए सेट नहीं किया है, इसलिए यह प्रदर्शित नहीं होता है।

+1

बिल्कुल काम नहीं कर रहा है, जब मैं उस कोड को पैनल प्रीरेंडर विधि में रखता हूं तो मुझे ArrayOutOfBoundsException मिलता है। – Chexpir

+1

काम नहीं कर रहा है ArrayOutOfBoundsException –

+2

मेरे लिए सरल और आसान काम किया। – RustyH

8

आप सर्वर पक्ष पर hidden कॉलम बना सकते हैं और किसी कारण से यह aspx कोड करने के लिए अलग है। इसे अभी भी संदर्भित किया जा सकता है जैसे कि यह दिखाई दे रहा था। बस इस कोड को अपने OnDataBound ईवेंट में जोड़ें।

protected void gvSearchResults_DataBound(object sender, EventArgs e) 
{ 
    GridView gridView = (GridView)sender; 

    if (gridView.HeaderRow != null && gridView.HeaderRow.Cells.Count > 0) 
    { 
     gridView.HeaderRow.Cells[UserIdColumnIndex].Visible = false; 
    } 

    foreach (GridViewRow row in gvSearchResults.Rows) 
    { 
     row.Cells[UserIdColumnIndex].Visible = false; 
    } 
} 
+0

यह काम करता है। आपको देख रहे सभी लोगों के लिए यह सुनिश्चित करने की आवश्यकता है कि हेडर कॉलम और ग्रिड व्यू कॉलम दोनों छुपाए जाएं। – Danrex

69
<head runat="server"> 
<title>Accessing GridView Hidden Column value </title> 
<style type="text/css"> 
    .hiddencol 
    { 
    display: none; 
    } 
</style> 

<asp:BoundField HeaderText="Email ID" DataField="EmailId" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" > 
</asp:BoundField> 

ArrayList EmailList = new ArrayList(); 
foreach (GridViewRow itemrow in gvEmployeeDetails.Rows) 
{ 
    EmailList.Add(itemrow.Cells[YourIndex].Text); 
} 
+0

इस समाधान की गहराई से स्पष्टीकरण के लिए http://www.netomatix.com/development/GridViewHideColumn.aspx देखें। – Marcel

+2

इस समाधान में अतिरिक्त लाभ है कि डेटा क्लाइंट पक्ष पर भी जावास्क्रिप्ट में पहुंच योग्य है।इस समस्या का पसंदीदा समाधान होना चाहिए! –

1

मैं एक विधि user496892 के लिए इसी तरह का प्रयोग किया:

SPBoundField hiddenField = new SPBoundField(); 
hiddenField.HeaderText = "Header"; 
hiddenField.DataField = "DataFieldName"; 
grid.Columns.Add(hiddenField); 

grid.DataSource = myDataSource; 
grid.DataBind(); 

hiddenField.Visible = false; 
33

सीएसएस में एक शैली को परिभाषित करें:

.hiddencol { display: none; } 

फिर ग्रिड क्षेत्र के लिए ItemStyle-CssClass="hiddencol" और HeaderStyle-CssClass="hiddencol" विशेषता जोड़ें :

<asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" ClientIDMode="Static" /> 
+0

यह एक बहुत अधिक प्रभावी जवाब है – ImCrimson

1

मैं एक नया समाधान है सीएसएस या जावास्क्रिप्ट या jQuery का उपयोग कर ग्राहक के पक्ष स्तंभ को छिपाने।

.col0 
{ 
    display: none; 
} 

और gvClientDetails.Columns[0].Visible = true; निर्धारित करते हैं, आप false को सेट करते हैं। बाध्य GridView की DataKeyNames संपत्ति को इस मामले SpecialInstructions में डेटा फ़ील्ड जोड़ने के लिए, और यह इस तरह से उपयोग कर सकते:

1

यहाँ कैसे एक GridView कि Visible=False पर सेट किया जाता में एक छिपे हुए स्तंभ के मूल्य प्राप्त करने के लिए है।

txtSpcInst.Text = GridView2.DataKeys(GridView2.SelectedIndex).Values("SpecialInstructions") 

यह है कि, यह हर बार बहुत ही सरल काम करता है।

0

आप इसे पीछे कोड कर सकते हैं। डेटा बाध्यकारी के बाद कॉलम के लिए

Set visible= false। इसके बाद आप फिर से दृश्यता कर सकते हैं "सच" पंक्ति_ चयन ग्रिड व्यू से फ़ंक्शन। यह काम करेगा !!

0

जब मैं GridView से GridView से पहले कुछ मान प्राप्त करना चाहता था।

  1. मेरे पास BoundField है और DataField को सामान्य रूप से बांधें।
  2. RowDataBound ईवेंट में, मैं उस घटना में कुछ प्रक्रिया करता हूं।
  3. GridView से पहले था कि मैं इस बारे में प्रकट होता है:

    protected void GridviewLecturer_PreRender(object sender, EventArgs e) 
    { 
        GridviewLecturer.Columns[0].Visible = false; 
    } 
    
संबंधित मुद्दे