2013-07-22 2 views
2

UpdateButtonSqlDataSource이 아래에있는 FormView입니다. 내 updatebutton은 항상 Sil 테이블을 동일한 값 (내 gridview의 첫 번째 줄에있는 값)으로 업데이트하므로 그 이유를 알 수 없습니다.SqlDataSource UpdateCommand 매개 변수가 변경되지 않습니다.

<asp:GridView ID="grd_Benefits" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" 
    CssClass="gridTable" DataSourceID="sds_Benefits" OnRowCommand="grd_Benefits_RowCommand"> 
    <RowStyle CssClass="gridRow" /> 
    <FooterStyle CssClass="gridFooter" /> 
    <SelectedRowStyle CssClass="gridSelectedRow" /> 
    <HeaderStyle CssClass="gridHeader" /> 
    <AlternatingRowStyle CssClass="gridAlternatingRow" /> 
    <EmptyDataTemplate> 
     No records found. 
    </EmptyDataTemplate> 
    <Columns> 
     <asp:BoundField DataField="Code" HeaderText="Code" SortExpression="Code" /> 
     <asp:BoundField DataField="HRName" HeaderText="HRName" SortExpression="HRName" /> 
     <asp:TemplateField HeaderText="Benefit Type" SortExpression="BenefitType.Name"> 
      <ItemTemplate> 
       <asp:Label ID="Label1" runat="server" Text='<%# Bind("BenefitTypeName") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="Cost" HeaderText="Cost" SortExpression="Cost" /> 
     <asp:TemplateField HeaderText="Cost Type"> 
      <ItemTemplate> 
       <asp:Label ID="Label2" runat="server" Text='<%# Bind("CostTypeName") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Quantity Type"> 
      <ItemTemplate> 
       <asp:Label ID="Label3" runat="server" Text='<%# Bind("QuantityTypeName") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:LinkButton ID="lbSelect" runat="server" CausesValidation="False" CommandName="ViewRecord" 
        Text="&lt;img border='0' alt='Edit' src='../images/zoom.gif' /&gt;" CommandArgument='<%# Container.DataItemIndex %>'></asp:LinkButton> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField ShowHeader="False"> 
      <HeaderTemplate> 
       <asp:LinkButton ID="lbInsert" runat="server" CausesValidation="false" CommandName="NewRecord" 
        Text="&lt;img border='0' alt='New' src='../images/new.gif' /&gt;" CommandArgument='<%# Container.DataItemIndex %>' 
        ForeColor="White"></asp:LinkButton> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <asp:LinkButton ID="lbEdit" runat="server" CausesValidation="False" CommandName="EditRecord" 
        Text="&lt;img border='0' alt='Edit' src='../images/edit.gif' /&gt;" CommandArgument='<%# Container.DataItemIndex %>'></asp:LinkButton> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

RowCommand :

<asp:FormView ID="frm_Benefit" runat="server" DataKeyNames="ID" DataSourceID="sds_Benefits" 
      OnItemInserted="frm_Benefit_ItemInserted" OnItemUpdated="frm_Benefit_ItemUpdated"> 
    <EditItemTemplate> 
     <table class="formview"> 
      <tr> 
       <td> 
        Code: 
       </td> 
       <td> 
        <asp:TextBox ID="CodeTextBox" runat="server" Text='<%# Bind("Code") %>' /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Name: 
       </td> 
       <td> 
        <asp:TextBox ID="NameTextBox" runat="server" Text='<%# Bind("Name") %>' /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        HRName: 
       </td> 
       <td> 
        <asp:TextBox ID="HRNameTextBox" runat="server" Text='<%# Bind("HRName") %>' /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Description: 
       </td> 
       <td> 
        <asp:TextBox ID="DescriptionTextBox" runat="server" Text='<%# Bind("Description") %>' 
         TextMode="MultiLine" MaxLength="200" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Associated Url: 
       </td> 
       <td> 
        <asp:TextBox ID="UrlTextBox" runat="server" Text='<%# Bind("Url") %>' MaxLength="100" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        BenefitType: 
       </td> 
       <td> 
        <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="sds_BenefitTypes" 
         DataTextField="Name" DataValueField="ID" SelectedValue='<%# Bind("BenefitTypeID") %>'> 
        </asp:DropDownList> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Cost: 
       </td> 
       <td> 
        <asp:TextBox ID="CostTextBox" runat="server" Text='<%# Bind("Cost") %>' /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Cost Type: 
       </td> 
       <td> 
        <asp:DropDownList ID="CostTypeDropDown" runat="server" DataSourceID="sds_CostTypes" 
         DataTextField="Name" DataValueField="ID" SelectedValue='<%# Bind("CostTypeID") %>'> 
        </asp:DropDownList> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Quantity Type: 
       </td> 
       <td> 
        <asp:DropDownList ID="QuantityTypeDropDown" runat="server" DataSourceID="sds_QuantityTypes" 
         DataTextField="Name" DataValueField="ID" SelectedValue='<%# Bind("QuantityTypeID") %>'> 
        </asp:DropDownList> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Quantity Entry On Add: 
       </td> 
       <td> 
        <asp:CheckBox ID="QuantityEntryOnAddCheckBox" runat="server" Checked='<%# Bind("QuantityEntryOnAdd") %>' /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Quantity Entry On Remove: 
       </td> 
       <td> 
        <asp:CheckBox ID="QuantityEntryOnRemoveCheckBox" runat="server" Checked='<%# Bind("QuantityEntryOnRemove") %>' /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Bonus Ratio: 
       </td> 
       <td> 
        <asp:TextBox ID="BonusRatioTextBox" runat="server" Text='<%# Bind("BonusRatio") %>'></asp:TextBox> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        ApplyIncomeTax: 
       </td> 
       <td> 
        <asp:CheckBox ID="ApplyIncomeTaxCheckBox" runat="server" Checked='<%# Bind("ApplyIncomeTax") %>' /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        ApplyStampTax: 
       </td> 
       <td> 
        <asp:CheckBox ID="ApplyStampTaxCheckBox" runat="server" Checked='<%# Bind("ApplyStampTax") %>' /> 
       </td> 
      </tr> 
      <tr> 
       <td class="style1"> 
        ApplySocialSecurityTax: 
       </td> 
       <td class="style1"> 
        <asp:CheckBox ID="ApplySocialSecurityTaxCheckBox" runat="server" Checked='<%# Bind("ApplySocialSecurityTax") %>' /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Applicable Location: 
       </td> 
       <td> 
        <asp:DropDownList ID="CostTypeDropDown1" runat="server" DataSourceID="sds_Locations" 
         DataTextField="Name" DataValueField="ID" SelectedValue='<%# Bind("ApplicableLocationID") %>'> 
        </asp:DropDownList> 
       </td> 
      </tr> 
      <tr> 
       <td colspan="2"> 
        <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" 
         Text="Update" Style="display: none" /> 
        &nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" 
         CommandName="Cancel" Text="Cancel" Style="display: none" /> 
       </td> 
      </tr> 
     </table> 
    </EditItemTemplate> 
</asp:FormView> 

<asp:SqlDataSource ID="sds_Benefits" runat="server" ConnectionString="<%$ ConnectionStrings:ConnFlexibleBenefitsDB %>" 
    SelectCommand="SELECT * FROM [View_Benefits]" 
    UpdateCommand="UPDATE [Sil] SET [Code] = @Code, [HRName] = @HRName WHERE [Id] = @Id"> 
    <UpdateParameters> 
     <asp:Parameter Name="Code" Type="String" /> 
     <asp:Parameter Name="HRName" Type="String" /> 
     <asp:Parameter Name="Id" Type="Int32" /> 
    </UpdateParameters> 

</asp:SqlDataSource> 

가 그리고 이것은 내있는 gridview입니다

protected void grd_Benefits_RowCommand(object sender, GridViewCommandEventArgs e) 
    {    
     if (e.CommandName == "ViewRecord") 
     { 
      grd_Benefits.SelectedIndex = int.Parse(e.CommandArgument.ToString()); 
      frm_Benefit.ChangeMode(FormViewMode.ReadOnly); 
      Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowFormViewView", "<script type=\"text/javascript\">showFormViewView();</script>"); 
     } 
     else if (e.CommandName == "NewRecord") 
     { 
      frm_Benefit.ChangeMode(FormViewMode.Insert); 
      Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowFormViewInsert", "<script type=\"text/javascript\">showFormViewInsert();</script>"); 
     } 
     else if (e.CommandName == "EditRecord") 
     { 
      grd_Benefits.SelectedIndex = int.Parse(e.CommandArgument.ToString()); 
      frm_Benefit.ChangeMode(FormViewMode.Edit); 
      Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowFormViewEdit", "<script type=\"text/javascript\">showFormViewEdit();</script>"); 
     } 
    } 
+0

GridView 마크 업을 보여주십시오. 관련 섹션 만. –

+0

@FlopScientist 추가했습니다. – HOY

+0

@FlopScientist 문제가 발생할 수있는 항목을 삭제할 위험이 없으므로 그대로 붙여 넣었습니다. 편집 버튼을 사용하면 위의 formview가 열립니다. 필요한 경우 girdview의 rowCommand 함수를 복사 할 수 있습니다. – HOY

답변

3

당신의 마크 업을보고하고 그대로 복용, 문제는 FormView와 함께입니다.

FormView에 AllowPaging = "true"를 설정하지 않았습니다. 따라서 FormView가 표시 될 때마다 검색된 모든 데이터 레코드의 첫 행만 표시합니다.

[양식보기에는 한 번에 하나의 레코드 만 표시됩니다.]

그래서 폼보기에서 '편집'을 선택할 때마다 실제로 첫 번째 레코드 만 편집합니다 (사실 GridView의 첫 번째 행).

FormView의 AllowPaging 속성을 true로 설정하십시오.

<asp:FormView ID="frm_Benefit" runat="server" DataKeyNames="CustomerID" 
DataSourceID="sds_Benefits" OnItemUpdated="frm_Benefit_ItemUpdated" 
AllowPaging="true"> 

페이징 인덱스를 사용하여 그 후에는 변경하고 아래와 같이 편집하려는 레코드로 이동합니다. enter image description here

+1

내 실수는 폼뷰가 첫 번째 레코드를 보여주고 있다는 것을 깨닫지 못했기 때문에 실제로 누군가 elses 코드를 변환하는 것이고 일반적으로 formview는 클릭 된 항목을 자동으로 표시해야하고 나는 클릭 이벤트와 관련하여 어딘가에 문제가 있다고 생각합니다. 그래서 페이지 뷰없이 찾을 필요가 있습니다. 왜 지금 작동하지 않는지 확인하고 있습니다. – HOY

+0

내 rowcommand를 추가했습니다. 시간이 있다면 확인할 수도 있습니까? 정상적으로 작동해야합니다. – HOY

+1

다음과 같이 구현하고 있습니다. GridView에서 행을 선택하십시오. 선택한 행이 FormView에 표시됩니다. 그러면 편집 할 것입니다. –

관련 문제