我想實現一个 GridView 控件和一个 DetailsView 控件生成主/详细视图。當選 GridView 控件中的“SELECT”時 DetailsView 中的值會跟著改變。HTML代碼如下:
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
            AutoGenerateColumns="False" DataSourceID="SqlDataSource1" DataKeyNames="a" AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" AutoGenerateSelectButton="True">
            <Columns>
                <asp:BoundField DataField="a" HeaderText="a" SortExpression="a" />
                <asp:BoundField DataField="b" HeaderText="b" SortExpression="b" />
                <asp:BoundField DataField="c" HeaderText="c" SortExpression="c" />
                <asp:BoundField DataField="d" HeaderText="d" SortExpression="d" />
            </Columns>
        </asp:GridView>
        &nbsp;&nbsp;
        <asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" AutoGenerateRows="False"
            DataSourceID="SqlDataSource1" Height="50px" Width="125px" DataKeyNames="a">
            <Fields>
                <asp:BoundField DataField="a" HeaderText="a" SortExpression="a" />
                <asp:BoundField DataField="b" HeaderText="b" SortExpression="b" />
                <asp:BoundField DataField="c" HeaderText="c" SortExpression="c" />
                <asp:BoundField DataField="d" HeaderText="d" SortExpression="d" />
                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" />
            </Fields>
可是程序運行時當點 GridView 控件中的“SELECT”時 DetailsView 中的值會並不會跟著改變

解决方案 »

  1.   

    需要两个sqldatasource:
    <asp:DetailsView ID="DetailsView1" runat="server" 
                  AutoGenerateRows="False" DataKeyNames="id"
                  DataSourceID="AccessDataSource2" >                
                </asp:DetailsView>
    <asp:AccessDataSource ID="AccessDataSource2" runat="server" DataFile="~/App_Data/test.mdb" SelectCommand="SELECT [id], [name], [count], [date], [content] FROM [table1] WHERE ([id] = ?)"
                      <SelectParameters>
                          <asp:ControlParameter ControlID="GridView1" Name="id" PropertyName="SelectedValue"
                              Type="Int32" />
                      </SelectParameters>
                     </asp:AccessDataSource>要这样DetailsView才会自动跟着GridView1的选中行改变
      

  2.   

    FilterExpression="a='@a'"個屬性就等於給它加了WHERE語句呀
      

  3.   

    对,要用两个sqldatasource.还有,gridview里面SELECT的事件:detailsview1.changemode(detailsviewmode.edit)还有,如果在detailsview里面修改了数据,gridview里面也要随之跟改变的话,就给detailsview1加一个itemupdated的事件:gridview1.databind()
      

  4.   

    這是我找的一段資料上面的,上面說将两者绑定到一个数据源呀。“在 ASP.NET 2.0 中,如果您想生成主/详细视图,则无需处理 SelectedIndexChanged 事件。您可以将一个 GridView 控件和一个 DetailsView 控件拖放到页面上,将两者绑定到一个数据源。生成无代码的主/详细视图的技巧是,将详细视图控件绑定到当前选定记录所代表的数据源,如下所示: <asp:sqldatasource runat="server" id="MyDetailSource"
    &#8226;&#8226;&#8226;
    selectcommand="Select * FROM customers"
    filterexpression="customerid='@customerid'">
    <filterparameters>
    <asp:ControlParameter Name="customerid"
    ControlId="masterGrid"
    PropertyName="SelectedValue" />
    </filterparameters>
    </asp:sqldatasource>
    数据源对象的 FilterExpression 属性为 SelectCommand 指定的基础查询定义 Where 子句。参数值能够以多种方式指定,包括直接绑定一个控件属性。 对象将 @customerid 参数设置为主网格控件的 SelectedValue 属性存储的值。图 14 的代码显示如何配置主网格控件和详细视图控件。图 15 显示活动页面。请注意,无需程序代码来完成这些功能”
      

  5.   

    問題已經解決,謝謝!是要定義兩個sqldatasource