我有3个嵌套的gridview,下面是html代码,第二个gridview中rowdataboun后面的代码。 在此代码中,第二个gridview的rowdatabound我想获取第二个gridview的数据键并获取第一个gridview的数据键,该信息对于填充第三个嵌套的gridview是必需的。

<div>
    <table style="width:100%;height:100%;">
        <tr>
            <td>
                <asp:GridView ID="grdOuterGridView" runat="server" AllowPaging="True"
            AutoGenerateColumns="False" DataKeyNames="nitter"
            onrowdatabound="grdOuterGridView_RowDataBound" CellPadding="4"
            ForeColor="#333333" GridLines="None">
            <AlternatingRowStyle BackColor="White" />
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <a href="javascript:switchViews('div<%# Eval("nitter") %>');">
                            <img id='imgdiv<%# Eval("nitter") %>' title="Click to show/hide orders" border="0" src="images/plus.png" width="15px" />
                        </a>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField HeaderText="trazonsocial" DataField="trazonsocial" />
                <asp:BoundField HeaderText="nitter" DataField="nitter"/>
                <asp:TemplateField>
                    <ItemTemplate>
                        </td></tr>
                        <tr>
                          <td colspan="100%">
                            <div id='div<%# Eval("nitter") %>' style="display:none;position:relative;left:25px;" >
                               <asp:GridView ID="grdInnerGridView" runat="server" Width="80%"
                               AutoGenerateColumns="false" DataKeyNames="id1"
                               onrowdatabound="grdInnerGridView_RowDataBound" CellPadding="4"
                               EmptyDataText="No register 2 ..." >
                                  <Columns>
                                     <asp:TemplateField>
                                        <ItemTemplate>
                                           <a href="javascript:switchViews('div<%# Eval("id1") %>');">
                                              <img id='imgdiv<%# Eval("id1") %>' title="Click to show/hide orders" border="0" src="images/plus.png" width="15px" />
                                           </a>
                                        </ItemTemplate>
                                     </asp:TemplateField>
                                     <asp:BoundField HeaderText="tipo1" DataField="tipo1" />
                                     <asp:BoundField HeaderText="tipo" DataField="tipo" />
                                     <asp:BoundField HeaderText="numero" DataField="numero" />
                                     <asp:TemplateField>
                                        <ItemTemplate>
                                           </td></tr>
                                             <tr>
                                               <td colspan="100%">
                                                 <div id='div<%# Eval("id1") %>' style="display:none;position:relative;left:25px;" >
                                                   <asp:GridView ID="grdInnerGridView2" runat="server" Width="80%"
                                                   AutoGenerateColumns="false" DataKeyNames="id1diariop"
                                                   EmptyDataText="No register 3..." >
                                                     <Columns>
                                                       <asp:BoundField HeaderText="tipo1" DataField="tipo1" />
                                                       <asp:BoundField HeaderText="tipo" DataField="tipo" />
                                                       <asp:BoundField HeaderText="Numero" DataField="numero" />
                                                       <asp:BoundField HeaderText="Cuenta" DataField="dcodigo" />
                                                       <asp:BoundField HeaderText="Debito" DataField="dvalordeb" />
                                                       <asp:BoundField HeaderText="Credito" DataField="dvalorcre" />
                                                     </Columns>
                                                   </asp:GridView>
                                                 </div>
                                              </td>
                                            </tr>
                                         </ItemTemplate>
                                     </asp:TemplateField>
                                  </Columns>
                               </asp:GridView>
                            </div>
                          </td>
                        </tr>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <EditRowStyle BackColor="#2461BF" />
            <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#EFF3FB" />
            <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#F5F7FB" />
            <SortedAscendingHeaderStyle BackColor="#6D95E1" />
            <SortedDescendingCellStyle BackColor="#E9EBEF" />
            <SortedDescendingHeaderStyle BackColor="#4870BE" />
        </asp:GridView>
            </td>
        </tr>
    </table>
</div>
protected void grdInnerGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow)
    {

        // this NOT WORKS  ????????? I need get datakey first gridview
        string cID = (string)grdOuterGridView.DataKeys[e.Row.RowIndex].Values["nitter"];

        //this NOT WORK   ?????????? I need get datakey second gridview (this)
        int iID = (int)grdInnerGridView.DataKeys[e.Row.RowIndex].Values["id1"];


        //I need "cID" and "iID" data for fill last gridview 
        GridView innerGridView2 = (GridView)e.Row.FindControl("grdInnerGridView2");
        FillInnerGrid2(cID, iID, innerGridView2);


    }
}

#1楼 票数:1 已采纳

在RowDataBound中获取子gridview的datakey的方法是:

protected void grdInnerGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{

    //Accessing GridView from Sender object
    GridView childGrid = (GridView)sender;

    if (e.Row.RowType == DataControlRowType.DataRow)
    {

        //Retreiving the GridView DataKey Value
        string cID = childGrid.DataKeys[e.Row.RowIndex].Value.ToString();


    }
}

#2楼 票数:0

将数据绑定到gridview时将触发RowDataBound事件。 DataKeys属性尚未填充。 如果要检索当前绑定行上的数据,则可以使用GridViewRowEventArgsDataItem属性。

要访问父行的DataItem ,您将必须进入控件树。 我们可以使用NamingContainer属性更快地上升。

这种代码应该可以工作:

protected void grdInnerGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Control outerRow = e.Row.Parent.NamingContainer;
        while(!(outerRow is IDataItemContainer))
        {
            outerRow = outerRow.NamingContainer; 
        }
        string cID = ((OuterDataType)((IDataItemContainer)outerRow)).nitter;
        int iID = ((InnerDataType)e.DataItem).Id;


        GridView innerGridView2 = (GridView)e.Row.FindControl("grdInnerGridView2");
        FillInnerGrid2(cID, iID, innerGridView2);
    }
}

  ask by Joel translate from so

未解决问题?本站智能推荐:

4回复

ASP.Net:在编辑和删除时从GridView获取DataKey

我正在使用GridView控件,该控件被数据绑定到从实用程序方法返回的对象List 。 GridView控件将其中一列设置为其DataKey。 当一行被Selected ,它会触发Selected事件处理程序,我可以使用myGridView.SelectedDataKey.Value来获取所
1回复

GridView:捕获和使用二进制DataKey

我有一个GridView,它是根据一些DropDown列表中指定的值从数据库中填充的。 我可以使用GridView将新行插入数据库,但是在更新现有行时遇到问题。 我知道要更新数据库中的一行,我在GridView上设置了一个DataKeyName,捕获了所选行的DataKey值,并将其作为
1回复

在gridview的Datakey字段中包含双精度值,但只保留整数部分,如何获取完整的双精度值

我在Gridview中要隐藏两列,但需要访问它们的值,因此我将它们保留在dataKey中 在这两个datakey字段中,一个是应用程序费用...。其中包含双精度格式的值,现在我要使用这些值进行计算...所以我使用以下方法从datakey申请费中获取了这些值 现在,例如,如果我的应用
1回复

在Button1_Click上,需要从选定的DataKey中获取值(用户在gridview中按Select并突出显示行)

这让我很生气。 在Button1_Click上,我需要从选定的DataKey中获取值(用户在gridview中按Select,然后突出显示行)。有人可以帮忙吗? 谢谢..
5回复

嵌套gridview获取父行

我正在使用嵌套GridViews,其中gridview中的每一行都有子gridView。 我正在使用Parent GridView的 RowDataBound事件来绑定Child GridView 。 我的问题是,如何获得Parent GridView的Key on Child gridVi
4回复

在Javascript中获取GridView选择的行DataKey

我有GridView,我可以选择一行。 然后我在网格上方有一个名为Edit的按钮,用户可以单击该按钮弹出一个窗口并编辑所选行。 因此按钮将在其后面有Javascript代码 问题是如何在javascript中检索所选的记录ID?
3回复

获取网格视图中每一行的dataKey值

尝试从网格视图获取数据键值时遇到问题。 这是代码: 在if (available.Where(x => x.id == gr.Cells[0].Text).Any()) ,应该逐行与第0列的值进行比较,如果id匹配,则复选框将被标记。 但是,我没有在网格视图中显示id列,而是将
1回复

嵌套的GridView

我有嵌套的网格视图的层次结构。 具体来说:我在网格视图(例如dt1)中嵌套了一个网格视图(例如dt2)。 现在,我在嵌套的网格视图(dt2)中嵌套了许多小的网格视图,并且我想在其中填充网格视图,由于dt2的rowdatabound事件没有像dt1的事件那样被触发,因此我发现这很乏味。