将BoundField提取到标签

时间:2015-12-11 13:02:50

标签: asp.net webforms data-access-layer detailsview

我有一个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")

3 个答案:

答案 0 :(得分:2)

我不会尝试在DetailsView上找到该文字,但在其中DataSource。您可以使用 DataBound数据绑定后触发DetailsView事件,以确保DataItem存在。

取决于Datasource的{​​{1}}。通常它是DetailsView。您必须投射它,然后您可以访问它的列:

DataRowView

如果不是protected void DetailsView1_DataBound(Object sender, EventArgs e) { DetailsView dv = (DetailsView)sender; string yourText = (string)((DataRowView)dv.DataItem)["ColumnName"]; Label1.Text = yourText; } ,请使用调试器查看DataRowView实际上是什么。

答案 1 :(得分:0)

我成功实现了我想要的用途:

string titletext = dtvBand.Rows[0].Cells[1].Text.ToString();
            dtvBand.Rows[0].Visible = false;
            lblBand.Text = titletext;

它接受DetailsView的第一行,将其置于Label的其余部分之上,以便将其格式化为标题,然后隐藏DetailsView的第一行。

答案 2 :(得分:0)

使用TemplateField如Tim所提到的那样:

<Fields>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:Label ID="lblName" runat="server" Text='<%# Eval("Band") %>' />
        </ItemTemplate>
    </asp:TemplateField>
</Fields>