2009-03-26 18 views
7

ऐसा लगता है कि GrGview के कॉलम में हेरफेर करने का कोई तरीका नहीं है यदि AutoGenerateColumns = true। यहां मेरा परिदृश्य है:AutoGenerateColumns = true के साथ ग्रिड व्यू में कॉलम में हेरफेर करने का कोई तरीका?

मुझे एक सामान्य ग्रिड व्यू मिला है जो उपयोगकर्ता द्वारा चुने गए विकल्पों के आधार पर विभिन्न अलग-अलग LINQ प्रश्नों के परिणाम प्रदर्शित करता है। मुझे यह तथ्य पसंद है कि ऑटोजनेर कॉलम इस तरह काम करता है और मुझे सभी बाउंडफ़िल्ल्ड, टेम्पलेटफ़िल्ल्ड कॉलम इत्यादि निर्दिष्ट करने की आवश्यकता नहीं है ...

उस पर, मैं भी प्रोग्रामिंग रूप से आवश्यकतानुसार अन्य कॉलम जोड़ रहा हूं। प्रोग्राम किए गए कॉलम को स्वचालित रूप से जोड़े गए कॉलम के बाईं ओर प्रदान किए जाते हैं। क्या होगा यदि मैं उन्हें दाईं ओर ले जाना चाहता था?

GridView.Columns.Count केवल उन लोगों की गणना करता है जो प्रोग्राम किए गए हैं, स्वत: उत्पन्न नहीं हैं, इसलिए मैं उन कॉलम को पुनर्व्यवस्थित नहीं कर सकता जो मैं चाहता हूं। मैं RowDataBound घटना को हुक कर सकता हूं और यदि आवश्यक हो तो कुछ "छुपाएं", लेकिन मैं पुनर्व्यवस्थित नहीं कर सकता।

क्या मुझे बस ऑटोगनेरेटेड कॉलम = सत्य छोड़ना है, और प्रत्येक क्वेरी के लिए बाउंडफिल्ड्स के साथ उन्हें बाहर रखना है? क्या मै कुछ कर सकता हुं?

उत्तर

3

आप इस तरह बाध्य डेटा पर चीजों में हेरफेर कर सकते हैं:

Private Sub MyGrid_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles Me.RowDataBound 
    If Me.AutoGenerateColumns = True Then 
    If e.Row.RowType = DataControlRowType.DataRow Then 
      e.row.cells.add(some code here to add your special column) 
    End If 
    End If 
End Sub 

आप अपनी खुद की शीर्षक के बनाने के लिए होगा, लेकिन यह बहुत संभव है।

0

मुझे नहीं लगता कि कम से कम वर्तमान ग्रिड व्यू के साथ स्वत: उत्पन्न कॉलम को नियंत्रित करना संभव है।

एक नया नियंत्रण कि GridView से विरासत बना कर आप जिस तरह से कॉलम बनाई गई हैं की कुछ और नियंत्रण हो सकता है, लेकिन मैं shure नहीं कर रहा हूँ अगर यह संभव है (अभी भी अनुसंधान के लिए लायक हो सकता है)

MSDN प्रलेखन से:

AutoGenerateColumns संपत्ति सही पर सेट किया जाता है, तो एक AutoGeneratedField वस्तु स्वचालित रूप से डेटा स्रोत में प्रत्येक क्षेत्र के लिए बनाया जाता है। प्रत्येक फ़ील्ड को में फ़ील्ड डेटा स्रोत में दिखाई देने वाले क्रम में ग्रिड व्यू नियंत्रण में कॉलम के रूप में प्रदर्शित किया जाता है। यह विकल्प डेटा स्रोत में प्रत्येक फ़ील्ड प्रदर्शित करने के लिए सुविधाजनक तरीका प्रदान करता है; हालांकि, आपके पास सीमित है कि स्वचालित रूप से जेनरेट किए गए कॉलम फ़ील्ड को प्रदर्शित किया गया है या व्यवहार करता है।

स्वचालित रूप से जेनरेट किए गए बाउंड कॉलम फ़ील्ड कॉलम संग्रह में जोड़े नहीं गए हैं।

इसके बजाय GridView नियंत्रण स्वचालित रूप से दे की

स्तंभ फ़ील्ड तैयार करते हैं तो मैन्युअल स्तंभ फ़ील्ड द्वारा गलत पर संपत्ति की स्थापना AutoGenerateColumns और फिर एक कस्टम कॉलम संग्रह बनाने परिभाषित कर सकते हैं। बाध्य स्तंभ फ़ील्ड के अलावा में, आप भी एक बटन स्तंभ फ़ील्ड, एक चेक बॉक्स स्तंभ फ़ील्ड, एक कमांड क्षेत्र, एक हाइपरलिंक स्तंभ फ़ील्ड, एक छवि क्षेत्र, या एक स्तंभ फ़ील्ड अपने स्वयं के कस्टम के आधार पर प्रदर्शित कर सकते हैं निर्धारित टेम्पलेट। अधिक जानकारी के लिए, कॉलम देखें।

1

ब्रेंडन के जवाब ने मुझे याद दिलाया कि मुझे यह झूठ बोल रहा था .. स्वरूपण के लिए अच्छा है।

GridView ...

<asp:GridView .... OnRowDataBound="myGridView_RowDataBound"> 

कोड के पीछे ...

Sub myGridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) 
    If e.Row.RowType = DataControlRowType.DataRow Then 
     ' Display the data in italics. 
     e.Row.Cells(1).Text = "<i>" & e.Row.Cells(1).Text & "</i>" 
    End If 
End Sub 
0

अगर किसी को अभी भी जरूरत का जवाब: बस का उपयोग से e.Row.Cells.Countरोडाटाबाउंड

0

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

Dictionary<string, int> _columnIndiciesForAbcGridView = null; 

protected void detailsReportGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (_columnIndiciesForAbcGridView == null) 
    { 
     int index = 0; 
     _columnIndiciesForAbcGridView = ((Table)((GridView)sender).Controls[0]).Rows[0].Cells 
      .Cast<TableCell>() 
      .ToDictionary(c => c.Text, c => index++); 
    } 

    // Add a column, this shifts the _columnIndiciesForAbcGridView though. 

    TableCell cell = new TableCell(); 
    cell.Text = "new Column"; 
    e.Row.Cells.AddAt(2, cell); 

    // Swap 0 and 1 

    int c0 = _columnIndiciesForAbcGridView["ConfigId"]; 
    int c1 = _columnIndiciesForAbcGridView["CreatedUtc"]; 

    string text = e.Row.Cells[c0].Text; 
    e.Row.Cells[c0].Text = e.Row.Cells[c1].Text; 
    e.Row.Cells[c1].Text = text; 
} 
संबंधित मुद्दे