這聽起來像AutoGeneratedColumns屬性在這裏不會幫助你,因爲列類型適用於整個GridView;它們不是按行計算的。
您可能可以使用帶有數據綁定的TemplateField來有條件地格式化每行的字段,而無需編寫任何代碼。
如果這不能爲你完成,我想你將不得不編寫代碼。請記住,RowCreated事件總是在創建行時觸發(事件回發),但只有當GridView實際轉到其DataSource進行數據綁定時,纔會爲您提供非空DataItem(e.Row.DataItem
);如果GridView緩存了呈現狀態(在ViewState中),則數據項將爲空。此時,您只能通過執行如下操作來訪問行的主鍵字段:var keys = myGridView.DataKeys[rowIndex];
(主鍵字段取決於您爲GridView的DataKeyNames
屬性賦予的值,並存儲在ViewState中,以便您可以訪問他們在回發。)
當修改某種類型的DataBoundField(大多數字段是)時,您也會小心;因爲RowDataBound事件發生在RowCreated事件之後,所以在RowCreated事件處理函數中對行/單元格內容進行的任何手動更改將在RowDataBound被觸發時通過數據綁定進行破壞。
這就是說,RowDataBound可能是你想要的事件。
RowDataBound事件總是會給你一個非null的DataItem,但只有當真正的數據綁定發生時纔會觸發(與ViewState中的「綁定」相反)。所以通常這個事件在回發時根本不會觸發。沒問題,但是,因爲GridView會記住它的狀態。
如果必須使用的代碼,它可能應該是這個樣子:
//don't forget to attach this event handler, either in markup
//on the GridView control, in code (say, in the Page_Init event handler.)
protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
//HtmlImage gives you a plain-vanilla <img> tag in the HTML.
//If you need to handle some server side events (such as Click)
//for the image, use a System.Web.UI.WebControls.Image control
//instead.
HtmlImage img = new HtmlImage() { Src = "path/to/image.jpg" };
e.Row.Cells[1].Controls.Add(img);
}
但是,嚴重的是,首先檢查了模板列。
你見過[這](http://stackoverflow.com/questions/15835667/wpf-add-image-to-cell-in-column) – Amol