C# 以编程方式将非数据绑定列添加到gridview
我想在第_load()页的gridview中添加一列 这是我想添加的标签。我的数据源中有ID。。但是我不想显示Id,我必须在我的对象模型中查找Id并用名称替换它 所以,我需要一个这样的标签:C# 以编程方式将非数据绑定列添加到gridview,c#,asp.net,C#,Asp.net,我想在第_load()页的gridview中添加一列 这是我想添加的标签。我的数据源中有ID。。但是我不想显示Id,我必须在我的对象模型中查找Id并用名称替换它 所以,我需要一个这样的标签: <asp:Label ID="1234" runat="server" OnDataBinding="BindName" /> 这是我在ascx文件中正在做的事情。。在TemplateField内部 我想通过编程在代码隐藏中做同样的事情 有什么想法吗?GridView有一个名为RowDat
<asp:Label ID="1234" runat="server" OnDataBinding="BindName" />
这是我在ascx文件中正在做的事情。。在TemplateField内部
我想通过编程在代码隐藏中做同样的事情
有什么想法吗?GridView有一个名为RowDataBound的事件。用那个。在此列的标记中有一个TemplateColumn。在RowDataBound事件中,执行如下操作(粗略示例):
您需要创建一个实现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);
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>
谢谢大家的帮助和解决办法。@Mike J
lblColumn.ItemTemplate=as中的as
是什么
here?@Bishan应该是lblColumn.ItemTemplate=newtemplateImplementation()代码>此外,对于GridView,您需要创建TemplateField,而不是TemplateColumn。TemplateColumns用于数据网格。@MikeJ如何将标签添加到网格视图中现有的TemplateField
?
<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>
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();
}
}