2013-04-29 4 views
2

Я получил ListView контроль, который имеет Gridview внутри его ItemTemplateпривязки данных к Gridview например внутри ListView ItemDataBound

<asp:ListView ID="InboxList" runat="server" OnItemDataBound="InboxList_ItemDataBound" OnItemCreated="InboxList_ItemCreated"> 
    <LayoutTemplate> 
     <tr runat="server" id="itemPlaceholder"></tr> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <tr> 
     <td> 
      <asp:Label Visible="false" ID="Id" runat="server" Text='<%#Eval("Id") %>' /> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      <asp:GridView ID="itemsGridView" runat="server" AutoGenerateColumns="False" BorderWidth="0px" ShowFooter="true" ShowHeader="true" HeaderStyle-CssClass="internal" OnRowDataBound="itemsGridView_RowDataBound"> 
       <Columns> 
        <asp:TemplateField HeaderText="Declared Value"> 
        <ItemTemplate> 
         <asp:Label ID="declaredValue" runat="server" ><%# Eval("DECLAREDVALUE") %></asp:Label> 
        </ItemTemplate> 
        <FooterTemplate> 
         <asp:Label ID="anotherValue" runat="server"></asp:Label> 
        </FooterTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
     </td> 
     </tr> 
    </ItemTemplate> 

Я пытаюсь открыть ярлык с ID="declaredValue" значением в RowDataBound случае моей Gridview, который Пожары когда ListView ItemDataBound Огонь ..

ListView ItemDataBound Событие

protected void InboxList_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListViewItemType.DataItem ||e.Item.ItemType == ListViewItemType.InsertItem||e.Item.ItemType == ListViewItemType.EmptyItem) 
    { 
     DataTable dt = new DataTable(); 
     DAL.GetDataID(int.Parse(((Label)e.Item.FindControl("Id")).Text), dt); 
     ((GridView)(e.Item.FindControl("itemsGridView"))).DataSource = dt; 
     ((GridView)(e.Item.FindControl("itemsGridView"))).DataBind(); 
    } 
} 

GridView RowDataBound Событие

protected void itemsGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Label lbl = (Label)e.Row.FindControl("declaredValue"); 
     if (lbl.Text != "") 
     { 
      //Here Text value equals "" always! 
      string value = lbl.Text; 
     } 
    } 
    if (e.Row.RowType == DataControlRowType.Footer) 
    { 
    } 
} 

Я получил доступ к этой метке, но каждый раз, когда это Text="" Но это имеет значение, я не знаю, что это лучшее время, чтобы получить доступ к его стоимости.

Просьба сообщить. Спасибо.

ответ

1

У вас есть пустой string в Text собственности declaredValue, потому что вы связывание GridView с пустым DataTable вам нужно добавить некоторые данные в нем.

if (e.Item.ItemType == ListViewItemType.DataItem ||e.Item.ItemType == ListViewItemType.InsertItem||e.Item.ItemType == ListViewItemType.EmptyItem) 
{ 
    DataTable dt = new DataTable(); 
    dt.Columns.Add("DECLAREDVALUE"); 
    DataRow dr = dt.NewRow(); 
    dr["DECLAREDVALUE"] = "hello"; 
    dt.Rows.Add(dr); 
    ((GridView)(e.Item.FindControl("itemsGridView"))).DataSource = dt; 
    ((GridView)(e.Item.FindControl("itemsGridView"))).DataBind(); 
} 

Edit OP изменил вопрос и добавил код для загрузки данных в таблицу данных.

Для определения значения, присвоенного каждой метке строки, необходимо указать e.Row.DataItem.

if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
    Label lbl = (Label)e.Row.FindControl("declaredValue"); 
    string valueAssignedToLabel = DataBinder.Eval(e.Row.DataItem, "declaredValueColumnOfDataTable").ToString(); 
    if (valueAssignedToLabel != "") 
    { 
     //Here Text value equals "" always! 
     string value = lbl.Text; 
    } 
} 
+0

Вопрос обновляется, я уже привязки данных к 'DeclaredValue' Ярлык из данных' 'DAL' я просто хочу, чтобы упростить мой вопрос – Mido

+0

Проверьте обновленный ответ. – Adil

+0

Это работает .. Спасибо :) – Mido