我有一个DetailsView,它使用数据访问层和查询字符串工作得很好。但是,我想提取其中一个字段,并将其用作标签中的文本,以便作为该页面的标题位于DetailsView之上。
这个是可能的吗?如果是这样,又是如何做到的呢?
这是DetailsView的摘要:
<Fields>
<asp:BoundField DataField="bandname" HeaderText="Band" />
<asp:BoundField DataField="contactname" HeaderText="Contact" />
<asp:BoundField DataField="county" HeaderText="County" />
</Fields>和后面的代码:
if (Request.QueryString.Count != 0)
{
int id = int.Parse(Request.QueryString["bandid"]);
dtvBand.Visible = true;
List<Band> bandDetails = new List<Band> { BandDAL.AnonGetAllBandDetails(id) };
dtvBand.DataSource = bandDetails;
dtvBand.DataBind();
}我想要做的是将第一个BoundField行中的数据作为标签的文本。伪码:
Label1.Text = (<asp:BoundField DataField="band")发布于 2015-12-11 21:11:08
我不会尝试在DetailsView上查找文本,而是在它的DataSource中查找。您可以使用在DetailsView被数据绑定之后触发的DataBound事件,这样就可以确保DataItem存在。
这取决于您的DetailsView的Datasource。通常它是一个DataRowView。你必须转换它,然后你才能访问它的列:
protected void DetailsView1_DataBound(Object sender, EventArgs e)
{
DetailsView dv = (DetailsView)sender;
string yourText = (string)((DataRowView)dv.DataItem)["ColumnName"];
Label1.Text = yourText;
}如果它不是DataRowView,那么使用调试器查看dv.DataItem到底是什么。
发布于 2015-12-12 04:22:22
我设法实现了我想要的东西,使用:
string titletext = dtvBand.Rows[0].Cells[1].Text.ToString();
dtvBand.Rows[0].Visible = false;
lblBand.Text = titletext;它获取DetailsView的第一行,将其放在标签中其余行的上方,以便可以将其格式化为标题,然后隐藏DetailsView的第一行。
发布于 2015-12-15 10:24:19
像蒂姆提到的那样使用TemplateField怎么样:
<Fields>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("Band") %>' />
</ItemTemplate>
</asp:TemplateField>
</Fields>https://stackoverflow.com/questions/34224232
复制相似问题