无法获取GridView中所选行的Datakey值以在FormView中使用

时间:2010-09-15 07:11:26

标签: asp.net gridview

我有这样的网格视图:

<asp:MultiView ID="MvCustomer" runat="server" ActiveViewIndex="0" >

<%--View 1 to List the customers--%>
<asp:View ID="VwCustomersList" runat="server" >
<asp:GridView ID="GvListCustomer" runat="server" AutoGenerateColumns="False" 
        HorizontalAlign="Center" DataSourceID="OdsGvCustomers" DataKeyNames="CUSNUM" 
        EnableModelValidation="True" onrowcommand="GvListCustomer_RowCommand"  >
    <Columns>
       <asp:TemplateField>
       <ItemTemplate>
       <asp:Label ID="LblCUSNUM" runat="server" Text='<%#Eval("CUSNUM") %>'></asp:Label>
       </ItemTemplate>
       </asp:TemplateField>
       <asp:TemplateField>
       <ItemTemplate>
       <asp:Label ID="LblCO_NAM" runat="server" Text='<%#Eval("CO_NAM") %>'></asp:Label>
       </ItemTemplate>
       </asp:TemplateField>
       <asp:TemplateField>
       <ItemTemplate>
       <asp:Label ID="LblCUSCTY" runat="server" Text='<%#Eval("CUSCTY") %>'></asp:Label>
       </ItemTemplate>
       </asp:TemplateField>
            <%--<asp:CommandField ButtonType="Button" SelectText="Edit" ShowSelectButton="true"  />--%>
            <asp:TemplateField>
            <ItemTemplate>
            <asp:Button ID="BtnSelect" runat="server" Text="Edit" CommandArgument='<%#Eval("CUSNUM")%>' CommandName="Select" />
            </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
            <ItemTemplate>
            <asp:Button ID="BtnDelete" runat="server" Text="Delete" CommandArgument='<%#Eval("CUSNUM")%>' CommandName="Delete" />
            </ItemTemplate>
            </asp:TemplateField>

    </Columns>

</asp:GridView>

    <asp:ObjectDataSource ID="OdsGvCustomers" runat="server" 
        SelectMethod="GetAllCustomers" TypeName="MultiView_EF.BLL.Customers_BLL">
    </asp:ObjectDataSource>

</asp:View>

<%--View 2 to show customer details--%>
<asp:View ID="VwCustomerDetail" runat="server" >
<asp:FormView ID="FvCustomerDetails" runat="server" HorizontalAlign="Center" 
        DataSourceID="OdsFvCustomerDetails" EnableModelValidation="True" DefaultMode="Edit" >
    <EditItemTemplate>
        CUSNUM:
        <asp:TextBox ID="CUSNUMTextBox" runat="server" Text='<%# Bind("CUSNUM") %>' />
        <br />
        CO_NAM:
        <asp:TextBox ID="CO_NAMTextBox" runat="server" Text='<%# Bind("CO_NAM") %>' />
        <br />
        CUSCTY:
        <asp:TextBox ID="CUSCTYTextBox" runat="server" Text='<%# Bind("CUSCTY") %>' />
        <br />
        <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" 
            CommandName="Update" Text="Update" />
        &nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server" 
            CausesValidation="False" CommandName="Cancel" Text="Cancel" />
    </EditItemTemplate>
    <InsertItemTemplate>
        CUSNUM:
        <asp:TextBox ID="CUSNUMTextBox" runat="server" Text='<%# Bind("CUSNUM") %>' />
        <br />
        CO_NAM:
        <asp:TextBox ID="CO_NAMTextBox" runat="server" Text='<%# Bind("CO_NAM") %>' />
        <br />
        CUSCTY:
        <asp:TextBox ID="CUSCTYTextBox" runat="server" Text='<%# Bind("CUSCTY") %>' />
        <br />
        <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" 
            CommandName="Insert" Text="Insert" />
        &nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server" 
            CausesValidation="False" CommandName="Cancel" Text="Cancel" />
    </InsertItemTemplate>
    <%--<ItemTemplate>
        CUSNUM:
        <asp:Label ID="CUSNUMLabel" runat="server" Text='<%# Bind("CUSNUM") %>' />
        <br />
        CO_NAM:
        <asp:Label ID="CO_NAMLabel" runat="server" Text='<%# Bind("CO_NAM") %>' />
        <br />
        CUSCTY:
        <asp:Label ID="CUSCTYLabel" runat="server" Text='<%# Bind("CUSCTY") %>' />
        <br />
    </ItemTemplate>--%>
    </asp:FormView>

    <asp:ObjectDataSource ID="OdsFvCustomerDetails" runat="server" 
        SelectMethod="GetCustomerByCusnum" TypeName="MultiView_EF.BLL.Customers_BLL">
        <SelectParameters>
            <asp:ControlParameter ControlID="GvListCustomer" Name="cusnum" 
                PropertyName="SelectedValue" Type="String" />
        </SelectParameters>
    </asp:ObjectDataSource>

</asp:View>

</asp:MultiView>

我的想法是,当用户点击“BtnSelect”时,我会将视图更改为包含FormView的视图,该视图具有配置为将GridView的SelectedValue作为输入参数的select方法 - 它将显示详细信息选定的客户。

我在“n”次之前完成了这个,但这次我无法让它工作。麻烦的是,当对formview的Select方法的调用转到相关函数 - “GetCustomerByCusnum”时,我的参数“cusnum”中有一个空值。

我知道我可以编写一个选择事件并使用CommandArgument,解析所选行的值并将其作为值传递给Select方法,但我不想要该解决方案。我知道它没有“选择”方法,但我不记得如何。

请帮忙。

2 个答案:

答案 0 :(得分:0)

通过查看您的代码,一切似乎都没问题,只需一个提示,如果您没有设置活动视图,请通过多视图的SetActiveView方法执行,请按下按钮进行操作。

您可以做的另一件事是:添加OdsFvCustomerDetails_Selecting和OdsFvCustomerDetails_Selected事件。在选择中,您可以看到传递的参数和值,如果查询中有任何错误,您可以看到e.Exception。所以它会让你更多地了解到底出了什么问题。

Additional note
另一件需要注意的事情是,多重控制的工作方式是它会绑定所有视图而不管哪个是活动的,因此会降低性能。你可能会找到更好的主意

答案 1 :(得分:0)

让人惊讶。一个问题的遗迹 - IIRC我为此删除了MV方法,因为我们将列表和详细信息部分移动到不同的aspx页面并使用了查询字符串参数。从来没有必要修复一些事情,事后看来,缺少一些参数分配。