2013-04-29 107 views
2

我得到了有一个GridviewListView控制其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> 

我想在RowDataBound事件我Gridview的是火与ID="declaredValue"价值访问此标签当ListView ItemDataBound火..

列表视图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

你必须在declaredValueText财产空string,因为你要绑定的GridViewDataTable你需要在它添加一些数据。

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

编辑 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

更新的问题,我已经从数据'DAL'数据绑定到'DeclaredValue'标签我只是想简化我的问题 – Mido 2013-04-29 11:57:10

+0

检查更新的答案。 – Adil 2013-04-29 12:04:10

+0

It works ..谢谢:) – Mido 2013-04-29 12:09:29