2010-09-15 50 views
0

我有這樣一個gridview:無法獲取選定行的Datakey價值GridView控件用於FormView控件

<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」次之前完成了這個操作,但這次我無法使它工作。麻煩的是,當窗體視圖的Select方法調用轉到相關函數 - 「GetCustomerByCusnum」時,其參數「cusnum」中有一個空值。

我知道我可以編寫一個選擇事件並使用CommandArgument,解析所選行的值並將其作爲值傳遞給Select方法,但我不想要該解決方案。我知道它沒有「選擇」的方法,但我不記得如何。

請幫忙。

+0

我認爲您添加爲datakeyname的數據庫值cusnum將會不同 – Dotnet 2010-09-16 15:17:16

+0

select方法返回IEnumerable ,並且CustomerDTO將CUSNUM作爲其中定義的屬性。這是我在網格中定義的datakeynames。我認爲這是正確的做法....? – Sandeep 2010-09-17 11:37:01

回答

0

哎呀。一個問題的遺留物 - IIRC在我們將列表和細節部分移到不同的aspx頁面並使用查詢字符串參數時,我沒有采用MV方法。事後看來,從來沒有必要修復一些必然的參數分配。

0

通過查看您的代碼,一切似乎都沒問題,只是一個提示,如果您沒有設置活動視圖,請按SetActiveView多視圖方法,請在按鈕單擊中執行該操作。

您可以做的另一件事是:添加OdsFvCustomerDetails_Selecting和OdsFvCustomerDetails_Selected事件。在選擇您可以看到傳遞的參數和值,並且在選擇中,如果查詢中有任何錯誤,您可以看到e.Exception。所以它會讓你更清楚到底發生了什麼問題。

Additional note
應該注意的另一件事是,在某種程度上multivew控制工程,無論取其有效,因此它會降低性能,它結合各方面的意見。你可能會發現更好的主意

+0

嗨, 是的,在BtnSelect點擊,我將視圖更改爲包含formview的視圖,然後調用DataBind() – Sandeep 2010-09-15 08:35:57

+0

您可以做的另一件事是:添加OdsFvCustomerDetails_Selecting和OdsFvCustomerDetails_Selected事件。在選擇您可以看到傳遞的參數和值,並且在選擇中,如果查詢中有任何錯誤,您可以看到e.Exception。所以它會讓你更清楚到底發生了什麼問題。 – 2010-09-15 10:05:38

+0

是的,我知道可以這樣做..但這是需要額外的努力。我之前做過這件事,而且我不需要編寫選擇事件。我想我錯過了一些設置或財產... – Sandeep 2010-09-16 06:22:46