2012-11-06 6 views
0

템플릿 필드가 이미있는 gridview에서 사용되는 SqlDataSource를 사용하여 입력 된 데이터를 SQL 데이터베이스에 다시 입력하는 방법은 누구나 알고 있습니다. 업데이트 기능? 나는이 일을하는 어떤 방법을 찾을 수 없었기 때문에 누군가가 이것을 어떻게 작동 시킬지 전혀 모른다는 생각이 들었다.gridview/templatefield를 사용하여 SQL 데이터베이스 업데이트

이 딜레마를 해결하는 데 도움이되는 정보가 더 필요하면 알려주십시오.

텍스트 상자의 정보와 같은 행의 다른 열의 필드를 편집하고 변경할 수 있으면 정보를 SQL 서버로 다시 가져올 수 있지만 변경 만하면 정보가 업데이트되지 않습니다. 텍스트 상자에있는 정보를 편집 모드에 있는지 아니면 그냥 업데이트 버튼을 클릭하든간에.

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<center> 
<form id="form1" runat="server"> 
<div> 

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     DataKeyNames="Brdcst_Nbr" DataSourceID="SqlDataSource1" 
     EmptyDataText="There are no data records to display." Width="657px"> 
     <Columns> 
      <asp:BoundField DataField="Brdcst_Nbr" HeaderText="Brdcst_Nbr"  ReadOnly="True" 
       SortExpression="Brdcst_Nbr" /> 
      <asp:BoundField DataField="Item_Nbr" HeaderText="Item_Nbr" 
       SortExpression="Item_Nbr" ReadOnly="True" /> 
      <asp:CheckBoxField DataField="IsPicked" HeaderText="IsPicked" 
       SortExpression="IsPicked" /> 
      <asp:TemplateField SortExpression="Row" HeaderText="Row"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Mode="twoway" AutoPostBack="true" CausesValidation="true" Text='<%# Bind("Row") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Mode="twoway" AutoPostBack="true" CausesValidation="true" Text='<%# Bind("Row") %>'></asp:TextBox> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:ButtonField ButtonType="Button" CommandName="Update" Text="Update" /> 
      <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" /> 
     </Columns> 
     <EditRowStyle HorizontalAlign="Center" VerticalAlign="Middle" /> 
     <RowStyle HorizontalAlign="Center" VerticalAlign="Middle" /> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConflictDetection="CompareAllValues" 
     ConnectionString="<%$ ConnectionStrings:ORDCConnectionString1 %>" 
     DeleteCommand="DELETE FROM [Test_New_Transpick] WHERE [Brdcst_Nbr] = @original_Brdcst_Nbr AND (([Item_Nbr] = @original_Item_Nbr) OR ([Item_Nbr] IS NULL AND @original_Item_Nbr IS NULL)) AND [IsPicked] = @original_IsPicked AND (([Row] = @original_Row) OR ([Row] IS NULL AND @original_Row IS NULL))" 
     InsertCommand="INSERT INTO [Test_New_Transpick] ([Brdcst_Nbr], [Item_Nbr], [IsPicked], [Row]) VALUES (@Brdcst_Nbr, @Item_Nbr, @IsPicked, @Row)" 
     UpdateCommand="UPDATE [Test_New_Transpick] SET [IsPicked] = @IsPicked, [Row] = @Row WHERE [Brdcst_Nbr] = @original_Brdcst_Nbr" 
     OldValuesParameterFormatString="original_{0}" 
     ProviderName="<%$ ConnectionStrings:ORDCConnectionString1.ProviderName %>" 
     SelectCommand="SELECT * FROM [Test_New_Transpick]" > 
     <DeleteParameters> 
      <asp:Parameter Name="original_Brdcst_Nbr" Type="String" /> 
      <asp:Parameter Name="original_Item_Nbr" Type="String" /> 
      <asp:Parameter Name="original_IsPicked" Type="Boolean" /> 
      <asp:Parameter Name="original_Row" Type="String" /> 
     </DeleteParameters> 
     <InsertParameters> 
      <asp:Parameter Name="Brdcst_Nbr" Type="String" /> 
      <asp:Parameter Name="Item_Nbr" Type="String" /> 
      <asp:Parameter Name="IsPicked" Type="Boolean" /> 
      <asp:Parameter Name="Row" Type="String" /> 
     </InsertParameters> 
     <UpdateParameters> 
      <asp:Parameter Name="Item_Nbr" Type="String" /> 
      <asp:Parameter Name="IsPicked" Type="Boolean" /> 
      <asp:Parameter Name="Row" Type="String" /> 
      <asp:Parameter Name="original_Brdcst_Nbr" Type="String" /> 
      <asp:Parameter Name="original_Item_Nbr" Type="String" /> 
      <asp:Parameter Name="original_IsPicked" Type="Boolean" /> 
      <asp:Parameter Name="original_Row" Type="String" /> 
     </UpdateParameters> 
    </asp:SqlDataSource> 

</div> 
</form> 
</center> 
</body> 
</html> 

답변

0

따라서 SQLdatabase의 속성을 CompareAllValues에서 OverwriteChanges로 변경하면이 문제가 해결되었습니다. 이제는 다른 것을 변경하지 않고도 업데이트해야하는 행/열의 텍스트 상자를 변경하여 변경 사항을 SQL 데이터베이스에 다시 기록 할 수 있습니다.

관련 문제