user2601252
user2601252

Reputation:

Extract a BoundField to a Label

I have a DetailsView which works fine using a data access layer and a query string. However, I'd like to extract one of the fields and use it as the text in a label to go above the DetailsView as a title to that page.

Is this possible? And if so, how?

This is an abstract of the DetailsView:

<Fields>
    <asp:BoundField DataField="bandname" HeaderText="Band" />
    <asp:BoundField DataField="contactname" HeaderText="Contact" />
    <asp:BoundField DataField="county" HeaderText="County" />
</Fields>

and the code behind:

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();
}

What I'd like to do is take the data in the first BoundField row and make it the text of a label. Pseudocode:

Label1.Text = (<asp:BoundField DataField="band")

Upvotes: 2

Views: 1060

Answers (3)

abramlimpin
abramlimpin

Reputation: 5077

How about using a TemplateField as what Tim mentioned:

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

Upvotes: 0

user2601252
user2601252

Reputation:

I managed to achieve what I wanted using:

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

It takes the first row of the DetailsView, puts it above the rest in a Label so it can be formatted as a header, then hides the first row of the DetailsView.

Upvotes: 0

Tim Schmelter
Tim Schmelter

Reputation: 460148

I would not try to find the text on the DetailsView but in it's DataSource. You could use the DataBound event which is triggered after the DetailsView was databound, so it's ensured that the DataItem exists.

It depends on the Datasource of your DetailsView. Often it is a DataRowView. You have to cast it, then you can access it's column:

protected void DetailsView1_DataBound(Object sender, EventArgs e)
{
    DetailsView dv = (DetailsView)sender;
    string yourText = (string)((DataRowView)dv.DataItem)["ColumnName"];
    Label1.Text = yourText;
}

If it's not a DataRowView use the debugger to see what dv.DataItem actually is.

Upvotes: 2

Related Questions