如何解决如何在GridView中将控件绑定到<ItemTemplate>?
| 编辑:我的对象定义如下。我将其传递给GridView1。public class UserTestorViewModel
{
public string Username {get;set;}
public string Password {get;set;}
public Label SuiteName {get;set;}
}
我将GridView绑定到自定义的List<UserTestorViewModel>
:
this.GridView1.DataSource = utViewModelList;
this.GridView1.DataBind();
在.aspx中,我有
<asp:TemplateField HeaderText=\"LoginName\">
<ItemTemplate>
<asp:Label ID=\"LoginName\" runat= \"server\" Text= \'<%# ((ViewModels.UserTestorViewModel)Container.DataItem).User.userName %> \'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
这是有效的,因为ViewModels.UserTestorViewModel.User.userName
是字符串,但是
<asp:TemplateField HeaderText=\"SuiteName\">
<ItemTemplate>
<%# ((ViewModels.UserTestorViewModel)Container.DataItem).SuiteName %>
</ItemTemplate>
</asp:TemplateField>
因为ViewModels.UserTestorViewModel.SuiteName
是from7ѭ的标签
那么如何将System.Web.UI.WebControls
绑定到<ItemTemplate>
而不是System.Web.UI.WebControls
的文本
解决方法
您可以在ItemTemplate中放置一个Placeholder控件,并将其标签控件放在GridView的RowCreated事件上:
protected void Page_Init(object sender,EventArgs e)
{
GridView1.RowCreated += new GridViewRowEventHandler(GridView1_RowCreated);
}
void GridView1_RowCreated(object sender,GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var dataItem = (KeyValuePair<int,Label>)e.Row.DataItem;
var nameLabelPlaceholder = e.Row.FindControl(\"NameLabelPlaceholder\") as PlaceHolder;
if (nameLabelPlaceholder != null)
{
nameLabelPlaceholder.Controls.Add(dataItem.Value);
}
}
}
protected void Page_Load(object sender,EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = GetGridViewDataSource();
GridView1.DataBind();
}
}
private object GetGridViewDataSource()
{
return (from item in Enumerable.Range(1,10)
select new KeyValuePair<int,Label>(item,new Label() { ID = string.Format(\"NameLabel_{0}\",item),Text = string.Format(\"Item #{0}\",ForeColor = System.Drawing.Color.Red }))
.ToDictionary(kvp1 => kvp1.Key,kvp2 => kvp2.Value);
}
<asp:GridView ID=\"GridView1\" runat=\"server\" AutoGenerateColumns=\"false\" DataKeyNames=\"Key\">
<Columns>
<asp:BoundField HeaderText=\"Id\" DataField=\"Key\" />
<asp:TemplateField HeaderText=\"Name\">
<ItemTemplate>
<asp:PlaceHolder runat=\"server\" ID=\"NameLabelPlaceholder\" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。