2013-07-17 86 views
0

我有一個數據表,我綁定到一個gridview。這些列是可變的,所以我想利用AutoGeneratedColumns。我想在某些條件下綁定圖像。我需要做什麼?添加圖像到數據表或gridview

void GridView1_RowCreated(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    DataRowView drv = e.Row.DataItem as DataRowView; 
    if (drv != null) 
     drv[1] = new HtmlImage() { Src = "add.png" }; 
} 
+0

你見過[這](http://stackoverflow.com/questions/15835667/wpf-add-image-to-cell-in-column) – Amol

回答

1

這聽起來像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); 
} 

但是,嚴重的是,首先檢查了模板列。

1

您可以使用的RowDataBound事件處理每一行:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      DataRowView drv = e.Row.DataItem as DataRowView; 
      if (drv != null) 
      { 
       // your code here... 
      } 
     } 
} 

有關此事件的詳細信息,請參閱here

1

這應該工作,它使用實際電池的控制:

void GridView1_RowCreated(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    HtmlImage img = new HtmlImage() { Src = "add.png" }; 
    e.Row.Cells[1].Controls.Add(img); 
}