2009-10-30 95 views
1

我想在page_load上添加一列到gridview上()以編程方式將非數據綁定列添加到gridview

它是我想要添加的標籤。我的數據源有ID ..但我不想顯示ID,我必須在我的對象模型中查找ID並用名稱替換它。

所以,我需要一個標籤,就像這樣:

<asp:Label ID="1234" runat="server" OnDataBinding="BindName" /> 

這是什麼我在ASCX文件做..裏面的TemplateField。

我想以編程方式在代碼中做同樣的事情。

任何想法?

回答

3

您需要創建一個實現該了Itemplate接口的類。

public class TemplateImplementation : ITemplate 
{ 
    public void InstantiateIn(Control container) 
    { 
     Label label = new Label(); 
     label.DataBinding += Label_DataBinding; 
     container.Controls.Add(label); 
    } 
    void Label_DataBinding(object sender, EventArgs e) 
    { 
     Label label = (Label)sender; 
     object dataItem = DataBinder.GetDataItem(label.NamingContainer); 
     string sName = /* Lookup your name using the dataitem here here */; 
     label.Text = sName; 
    } 
} 

然後創建一個TemplateColumn中和你的ItemTemplate設置爲這個類的一個實例。

TemplateColumn lblColumn = new TemplateColumn(); 
lblColumn.ItemTemplate = as; 
grdMyGrid.Columns.Add(lblColumn); 
+0

感謝所有幫助和解決方案。 – LibraRocks 2009-10-30 21:55:00

+0

@Mike J'lblColumn.ItemTemplate = as;'這裏的'as'是什麼? – Bishan 2013-06-21 11:03:21

+0

@Bishan這應該是 'lblColumn.ItemTemplate =新TemplateImplementation();' 此外,對於一個GridView,你需要創建一個TemplateField,不TemplateColumn中。 TemplateColumns用於DataGrid。 – 2013-06-21 14:57:55

0

GridView有一個名爲RowDataBound的事件。使用它。在您的標記中爲此列添加TemplateColumn。在RowDataBound事件,做這樣的事情(如原油):

 Private Sub GridView1_OnRowDataBound(ByVal sender as Object, ByVal e as EventArgs) 
      If e.Row.RowType = DataControlRowType.DataRow Then 
       'in this example the column in question is the 3rd column 
       'unless you are doing some javascript or some css on the label, I would 
       'recommend using a literal and not label. This is presuming there is no    
       'label or literal control in the ItemTemplate property of the TemplateColumn 
       Dim lt as New Literal 
       lt.Text = NameController.GetName(e.Row.DataItem("NameID")) 'your business logic layer goes here 
       e.Row.Cells(2).Controls.Add(lt) 
      End If 
     End Sub 

In addition, here is a link that may help you further:

0

ASPX來源

<asp:GridView ID="sampleGridView" Runat="server" DataSourceID="sampleDataSource"> 
    <Columns> 
    <asp:TemplateField HeaderText="Territories"> 
     <ItemTemplate> 
    <asp:Label ID="1234" runat="server"/> 
     </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField HeaderText="FirstName" DataField="FirstName" 
      SortExpression="FirstName"></asp:BoundField> 
     <asp:BoundField HeaderText="LastName" DataField="LastName" 
      SortExpression="LastName"></asp:BoundField> 
</Columns> 

C#代碼

void sampleGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
    Label bl = (Label)e.Row.FindControl("1234"); 
    bl.Text= ((DataRowView) e.Row.DataItem)["ID"].ToString(); 
    } 
} 
相關問題