2015-12-11 2 views
2

У меня есть DetailsView, который отлично работает с использованием уровня доступа к данным и строки запроса. Тем не менее, я хотел бы извлечь одно из полей и использовать его в качестве текста в ярлыке, чтобы перейти к DetailsView в качестве заголовка на эту страницу.Извлечь BoundField на метку

Возможно ли это? И если да, то как?

Это аннотация 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") 

ответ

2

Я бы не попытаться найти текст на DetailsView, но в это DataSource. Вы можете использовать событие DataBound, которое было вызвано послеDetailsView было привязкой к базе данных, поэтому гарантируется, что существует DataItem.

Это зависит от Datasource вашего 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 использовать отладчик, чтобы посмотреть, что dv.DataItem на самом деле.

0

мне удалось добиться того, что я хотел с помощью:

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

Он занимает первую строку DetailsView, ставит его выше остальных в этикетке, поэтому он может быть отформатирован как заголовок, затем скрывает первый строка DetailsView.

+0

Этот подход терпит неудачу, если кто-то изменяет DetailsView, например, использует TemplateField использовать контроль. –

0

Как об использовании TemplateField как то, что упомянутый Тим:

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