我正在创建一个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" />
...
答案 0 :(得分:1)
执行此操作的标准方法是将griview的选定项目作为您连接到详细信息视图的objectdatasource的控制参数。我可能不会过多担心您已经拥有的数据转发的开销,除非您正在为那些连接速度很慢的用户提供服务,以避免不惜一切代价绕过网络服务器。
如果你真的想避免这种情况,那么你可以使用javascript / jquery从gridview中提取数据,然后通过ajax调用进行插入/更新。但它需要更多的编码。
答案 1 :(得分:0)
这是一个非常古老的线程,但是如果有人像我一样来这里寻找答案,一个简单的解决方案是将该函数添加到您的代码中:
(请注意,这仅在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属性中隐藏分页选项。