代码之家  ›  专栏  ›  技术社区  ›  Nix

将DetailsView设置为GridView的选定行

  •  0
  • Nix  · 技术社区  · 15 年前

    我正在创建一个GridView/DetailsView页面。我有一个网格,显示一堆行,当选中一行时,它使用一个detailsView来允许插入/更新。

    我的问题是,最好的方法是什么?我不想再联系Web服务,我需要的所有数据都在选定的网格视图行中。我基本上有两个单独的数据源共享相同的“dataObjectTypeName”,第一个数据源检索数据,另一个数据源执行CRUD。

    将所选网格视图行传输到详细信息视图的最佳方法是什么?我需要手动处理插入/更新事件并自己调用数据源吗?

    是否没有办法将这两个链接起来,以便它们使用相同的数据源?

      <asp:GridView ID="gvDetails" runat="server" DataKeyNames="ID, Code"
                    DataSourceID="odsSearchData" >
       <Columns>
            <asp:BoundField DataField="RowA" HeaderText="A" SortExpression="RowA" />
            <asp:BoundField DataField="RowB" HeaderText="B" SortExpression="RowB" />
            <asp:BoundField DataField="RowC" HeaderText="C" SortExpression="RowC" />
    
    
    
        ....Code...
    
     <asp:DetailsView ID="dvDetails" runat="server" DataKeyNames="ID, Code"
                    DataSourceID="odsCRUD" GridLines="None" DefaultMode="Edit" AutoGenerateRows="false"
                    Visible="false" Width="100%">
             <Fields>
                <asp:BoundField DataField="RowA" HeaderText="A" SortExpression="RowA" />
               <asp:BoundField DataField="RowB" HeaderText="B" SortExpression="RowB" />
               <asp:BoundField DataField="RowC" HeaderText="C" SortExpression="RowC" />
    
    ...
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Coding Flow    15 年前

    标准的方法是将griView的选定项作为连接到detailsView的对象数据源的控制参数。我可能不会太担心检索您已经拥有的数据的开销,除非您为连接速度如此之慢的用户提供服务,这样您就可以不惜一切代价避免往返于Web服务器。

    如果您真的想避免这种情况,那么可以使用javascript/jquery将数据从网格视图中拉出,然后通过Ajax调用进行插入/更新。但它需要更多的编码。

        2
  •  0
  •   Louis    6 年前

    这是一个非常古老的线程,但是如果有人像我一样来这里寻找答案,一个简单的解决方案是将此函数添加到代码中:

    (请注意,只有当GridView中的行与DetailsView中的条目匹配时,此操作才有效。)

    protected void GridView1_OnSelectedIndexChanged(object sender, EventArgs e)
    {
         DetailsView1.SetPageIndex(GridView1.SelectedIndex);
    }
    

    并修改GridView和DetailsView以包含这些设置:

    <asp:GridView ... OnSelectedIndexChanged="GridView1_OnSelectedIndexChanged" ... >
    <asp:DetailsView ... AllowPaging="True" ... >
    

    这将使DetailsView中的所选页面与GridView中的所选索引匹配。

    如果不希望用户在DetailsView中使用分页进行导航,可以隐藏DetailsView属性中的分页选项。