2010-10-13 15 views
17

द्वारा ग्रिडव्यू कॉलम इंडेक्स को खोजने का तरीका मैं लूप के माध्यम से एक छोटी सी विधि लिखने की कोशिश कर रहा हूं और GridView कॉलम को अपने इंडेक्स द्वारा ढूंढ सकता हूं, क्योंकि यह दिखाई देने वाली स्थिति के आधार पर स्थिति बदल सकता है।नाम

private int GetColumnIndexByName(GridView grid, string name) 
{ 
    foreach (DataColumn col in grid.Columns) 
    { 
     if (col.ColumnName.ToLower().Trim() == name.ToLower().Trim()) return col.Ordinal; 
    } 

    return -1; 
} 

इस मामले में, DataColumn सही प्रकार का उपयोग करने के लिए प्रकट नहीं होता है, लेकिन मैं एक तरह से करने के लिए के रूप में खो रहा हूँ मैं क्या कर किया जाना चाहिए:

यहाँ मैं अब तक किया है यहाँ।

मैं केवल .NET 2.0/3.5 का उपयोग कर सकता हूं। मैं 4.0 का उपयोग नहीं कर सकता।

उत्तर

30

मैंने इसे समझ लिया, मुझे DataControlField और थोड़ा अलग वाक्यविन्यास का उपयोग करने की आवश्यकता थी।

काम कर संस्करण:

private int GetColumnIndexByName(GridView grid, string name) 
    { 
     foreach (DataControlField col in grid.Columns) 
     { 
      if (col.HeaderText.ToLower().Trim() == name.ToLower().Trim()) 
      { 
       return grid.Columns.IndexOf(col); 
      } 
     } 

     return -1; 
    } 
16

मैं संग्रह यात्रा पसंद करते हैं लेकिन क्यों इस मामले में foreach की भूमि के ऊपर और grid.Columns.IndexOf कॉल से परेशान? एक सूचकांक के साथ सरणी के माध्यम से बस फिर से शुरू करें।

private int GetColumnIndexByName(GridView grid, string name) 
{ 
    for(int i = 0; i < grid.Columns.Count; i++) 
    { 
     if (grid.Columns[i].HeaderText.ToLower().Trim() == name.ToLower().Trim()) 
     { 
      return i; 
     } 
    } 

    return -1; 
} 
1

बेहतर समाधान जो डेटाफील्ड, सॉर्टएक्सप्रेस और हेडर टेक्स्ट के लिए काम करता है।

public static int GetBoundFieldIndexByName(this GridView gv,string name) 
    { 
     int index = 0; 
     bool found = false; 
     foreach (DataControlField c in gv.Columns) 
     { 
      if (c is BoundField) 
      { 
       BoundField field = (BoundField)c; 
       if (name == field.DataField || 
        name == field.SortExpression || 
        name == field.HeaderText) 
       { 
        found = true; 
        break; 
       } 
      } 
      index++; 
     } 
     return found ? index : -1; 
    } 
1

इस तरह, मुझे (.NET GridView) के लिए काम करता है:

private int GetColumnIndexByName(GridView grid, string name) 
    { 
     for (int i = 0; i < grid.HeaderRow.Cells.Count; i++) 
     { 
      if (grid.HeaderRow.Cells[i].Text.ToLower().Trim() == name.ToLower().Trim()) 
      { 
       return i; 
      } 
     } 
     return -1; 
    } 
+0

ऐसा लगता है कि 'HeaderRow' जब तक के बाद डेटा बाध्य है initialised नहीं है। – Matt

+0

सुधार: डेटा स्रोत 'सेट होने के बाद तक। – Matt

0
//Get index of column by header text. 
    int GetColumnIndexByName(GridViewRow row, string headerText) 
    { 
     int columnIndex = 0; 
     foreach (DataControlFieldCell cell in row.Cells) 
     { 
      if(cell.ContainingField is TemplateField){ 
       if(((TemplateField)cell.ContainingField).HeaderText.Equals(headerText)) 
       { 
        break; 
       } 
      } 
      if(cell.ContainingField is BoundField){ 
        if (((BoundField)cell.ContainingField).HeaderText.Equals(headerText)) 
       { 
        break; 
       } 
      } 
      columnIndex++; 
     } 


     return columnIndex; 
    } 
संबंधित मुद्दे