2011-05-27 46 views
1

我無法設置所有更新參數。我的GridView中的大部分字段都是DataBound,但其中兩個是下拉列表,一個列表項指定,另一個從另一個數據源拉取。當用戶點擊GridView上的「更新」時,我想將它們的值設置爲UpdateParameters以發送到我的存儲過程。雖然我不確定如何去做這件事。GridView RowUpdating - UpdateParameters

這是我的工作的代碼,這兩個下拉列表是 「ddlTransferLocation」 和 「ddlReconcileStatus」:

數據來源

<asp:SqlDataSource ID="reconcileDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="GetReconcileItems" SelectCommandType="StoredProcedure" 
    UpdateCommand="UpdateReconcileItems" UpdateCommandType="StoredProcedure"> 

    <UpdateParameters> 
     <asp:Parameter Name="ItemID" /> 
     <asp:Parameter Name="TransType" Type="String" /> 
     <asp:Parameter Name="LocationID" Type="String" /> 
     <asp:Parameter Name="Description" Type="String" /> 
     <asp:Parameter Name="Stat" Type="String" /> 
     <asp:Parameter Name="TransferLocation" Type="String" /> 
    </UpdateParameters> 

</asp:SqlDataSource> 

C#ROW UPDATING

protected void reconcileGrid_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     DropDownList ddlReconcileStatus = (DropDownList)reconcileGrid.Rows[e.RowIndex].Cells[0].FindControl("ddlReconcileStatus"); 

     reconcileDataSource.UpdateParameters["Stat"].DefaultValue = ddlReconcileStatus.SelectedValue.ToString(); 

    } 

ASP.NET GRIDVIEW

<asp:UpdatePanel ID="reconcileUpdatePanel" runat="server"> 
     <ContentTemplate> 
      <asp:GridView ID="reconcileGrid" runat="server" AutoGenerateColumns="False" 
       DataKeyNames="ItemID" DataSourceID="reconcileDataSource" OnRowUpdating="reconcileGrid_RowUpdating" > 
       <Columns> 
        <asp:CommandField ShowEditButton="True" /> 
        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" ReadOnly="true" /> 
        <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" ReadOnly="true"/> 
        <asp:BoundField DataField="last_known_location" HeaderText="Last Known Location" SortExpression="last_known_location" ReadOnly="true" /> 
        <asp:TemplateField HeaderText="Status"> 
         <ItemTemplate> 
          <asp:Label ID="lblStatus" runat="server" Text='<%# evalStatus(Eval("Stat")) %>'></asp:Label></ItemTemplate><EditItemTemplate> 
          <asp:DropDownList ID="ddlReconcileStatus" runat="server" OnSelectedIndexChanged="ddlReconcileStatus_SelectedIndexChanged" AutoPostBack="true" > 
           <asp:ListItem Value="3" Text="Allocated"></asp:ListItem><asp:ListItem Value="4" Text="Transferred"></asp:ListItem></asp:DropDownList></EditItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="Transfer Location" Visible="false" > 
         <EditItemTemplate> 
          <asp:DropDownList ID="ddlTransferLocation" runat="server" 
           DataSourceID="ddlTransferLocationDataSource" DataTextField="Name" 
           DataValueField="ID" Enabled="true" ></asp:DropDownList> 
         <asp:SqlDataSource 
           ID="ddlTransferLocationDataSource" runat="server" 
           ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
           SelectCommand="SELECT [ID], [Name] FROM [TransferLocation]"> 
         </asp:SqlDataSource> 
         </EditItemTemplate> 
        </asp:TemplateField> 
        <asp:BoundField DataField="ItemID" HeaderText="ItemID" ReadOnly="true" /> 
       </Columns> 
      </asp:GridView> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

回答

1

我想你應該使用SqlDataSource.Updating事件,並完成類似

DropDownList ddlReconcileStatus = (DropDownList)reconcileGrid.Rows[reconcileGrid.EditIndex].Cells[0].FindControl("ddlReconcileStatus"); 
reconcileDataSource.UpdateParameters["Stat"].DefaultValue = ddlReconcileStatus.SelectedValue.ToString(); 
+0

好吧,我給一個鏡頭。雖然我得到一個沒有找到「EditRowIndex」的擴展方法 – Will 2011-05-27 14:28:30

+0

對不起,它應該是'EditIndex' http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.editindex。 aspx – 2011-05-27 14:29:49

+0

我看到它正在獲取正確的值並更新參數,但它實際上從未運行存儲過程。我沒有得到任何錯誤,只是沒有任何反應。 – Will 2011-05-27 14:46:40

相關問題