Невозможно получить значение Datakey выбранной строки в GridView для использования в FormView - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть вид сетки как это:

<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, в котором есть метод выбора, настроенный для принятия SelectedValue GridView в качестве входного параметра - он покажет детали выбранный клиент.

Я делал это раньше "n" раз, но я не могу заставить его работать в этот раз. Беда в том, что когда вызов метода выбора вида формы переходит к соответствующей функции - «GetCustomerByCusnum», в его параметре «cusnum» у меня появляется нулевое значение.

Я знаю, что могу написать событие выбора и с помощью CommandArgument проанализировать значение выбранной строки и передать его в метод Select в качестве значения, но я не хочу этого решения. Я знаю, что это работает без метода «Выбор», но я не могу вспомнить, как.

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2013

Хлоп. Реликвия вопроса - IIRC Я покончил с подходом MV для этого, когда мы переместили раздел со списком и подробностями на разные страницы aspx и использовали параметры строки запроса. Никогда не исправлял то, что должно было быть задним числом при пропущенном назначении параметров.

0 голосов
/ 15 сентября 2010

Посмотрев на ваш код, все кажется нормальным, всего одна подсказка, если вы не устанавливаете активный вид, сделайте это с помощью SetActiveView метода многовидового просмотра, сделайте это, нажав кнопку.

Еще одна вещь, которую вы можете сделать: добавить события OdsFvCustomerDetails_Selecting и OdsFvCustomerDetails_Selected.в разделе «Выбор» можно увидеть переданные параметры и значения, а в разделе «Выбранные» - исключение e.Exception, если в запросе есть какая-либо ошибка.так что это даст вам больше представления о том, что именно идет не так.

Additional noteЕще одна вещь, которую следует отметить, заключается в том, что управление множественными функциями работает таким образом, что оно связывает все представления независимо от того, какое из них активно, поэтому оно снижает производительность.Возможно, вы найдете лучшую идею

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...