2009-07-25 49 views
0

我想在datagridview的下面的事件中找到單元格的列名稱。是否可以讀取gridview中單元格的列名稱?

protected void grvDetailedStatus_ItemDataBound(object sender, DataGridItemEventArgs e) 
{ 
    for (int i = 0; i <= e.Item.Cells.Count - 1; i++) 
    { 
     System.DateTime cellDate = default(System.DateTime); 
     if (System.DateTime.TryParse(e.Item.Cells[i].Text, out cellDate)) 
     { 
      e.Item.Cells[i].Text = string.Format("{0:d}", cellDate); 
     } 
    } 
} 

有什麼方法可以找到我操縱的單元格的列名稱嗎?

編輯:對不起,沒有給出明確的解釋。讓我更清楚地解釋它。

我想只有在特定的列值做如下格式:

protected void grvDetailedStatus_ItemDataBound(object sender, DataGridItemEventArgs e) 
{ 
    for (int i = 0; i <= e.Item.Cells.Count - 1; i++) 
    { 
     System.DateTime cellDate = default(System.DateTime); 
     if (System.DateTime.TryParse(e.Item.Cells[i].Text, out cellDate)) 
     { 
      e.Item.Cells[i].Text = string.Format("{0:d}", cellDate); 

     } 
    } 
} 

說,例如,我要更改日期的格式只爲「列1」和「column5」。所以現在我想知道列名稱,並且我想單獨格式化該列並留下剩下的部分。

protected void grvDetailedStatus_ItemDataBound(object sender, DataGridItemEventArgs e) 
{ 
    if (columnName == "Column1") 
    { 
     for (int i = 0; i <= e.Item.Cells.Count - 1; i++) 
     { 
      System.DateTime cellDate = default(System.DateTime); 
      if (System.DateTime.TryParse(e.Item.Cells[i].Text, out cellDate)) 
      { 
       e.Item.Cells[i].Text = string.Format("{0:d}", cellDate); 
      } 
     } 
    } 
} 

+0

你提的datagridview是混亂的人。有兩種風格:DataGrid和GridView。您正在使用DataGrid。 – Thorarin 2009-07-25 16:03:31

回答

0

我假設你正在使用一個DataGrid。 GridView是一個類似的控件,但風格稍有不同。我也會假設你使用自動生成的列,在這種情況下,DataGrid.Columns集合不會幫助你。

而不是每次檢查列名稱,最好是一次存儲您感興趣的列的索引。就像這樣:

private List<int> _myColumns; 

protected void grvDetailedStatus_ItemDataBound(object sender, 
    DataGridItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Header) 
    { 
     _myColumns = new List<int>(); 

     for (int i = 0; i < _columnNames.Length; i++) 
     { 
      switch (e.Item.Cells[i].Text) 
      { 
       case "column1": 
       case "column5": 
        // Interesting column, store index 
        _myColumns.Add(i); 
        break; 
      } 
     } 
    } 
    else if (e.Item.ItemType == ListItemType.Item || 
     e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     foreach (int i in _myColumns) 
     { 
      // Your original code: 
      System.DateTime cellDate = default(System.DateTime); 
      if (System.DateTime.TryParse(e.Item.Cells[i].Text, out cellDate)) 
      { 
       e.Item.Cells[i].Text = string.Format("{0:d}", cellDate); 
      } 
     } 
    } 
} 

如果你真的想存儲所有的列名,這將是很容易適應這個代碼(或看看這個帖子的早期版本)。

-1

首先您需要檢查e.Item是否爲ListItemType.ItemListItemType.AlternatingItemListItemType.Header。如果它是一個頭,那麼你就可以拿到冠軍如下:

protected void grvDetailedStatus_ItemDataBound(object sender, DataGridItemEventArgs e) 
{ 
    if(e.Item.ItemType == ListItemType.Header)) 
    { 
     // retrieve the header text... e.g. 
     string FirstCellHeader = e.Item.Cells[0].Text; 
    } 
    else if((e.Item.ItemType == ListItemType.Item) || 
     (e.Item.ItemType == ListItemType.AlternatingItem)) 
    { 
     // your code for items 
    } 
} 
+0

嗨對不起,我已經更清楚地更新了這個問題。請幫助。 – Jebli 2009-07-25 15:43:35

+0

您的代碼對我有用 – Jebli 2009-07-25 15:44:07

0

如果你通過各個單元ItemDataBound事件期間運行,並需要得到一個單元格的列名,那麼你可以使用以下命令:

protected void myDataGrid_ItemDataBound(object sender, DataGridItemEventArgs e) 
{ 
    int i = 0; 
    string colName; 

    foreach (TableCell cell in e.Item.Cells) 
    { 
     //string cellTxt = e.Item.Cells[i].Text; 
     DataRowView dv = (DataRowView)e.Item.DataItem; 
     colName = dv.DataView.Table.Columns[i].ColumnName; 
     i++; 
    } 
} 
相關問題