2017-10-09 3 views
0

특정 행의 '업데이트'버튼을 눌렀을 때 '질문'입력란을 업데이트하려고합니다. 나는 '편집'버튼을 눌렀을 때 텍스트를 변경할 수 있지만 '업데이트'버튼을 누르면 원래 값으로 되돌아갑니다. 아무것도 데이터베이스에서 변경되지 않습니다.왜 내 GridView가 업데이트되지 않습니까?

<div class="divGrid" style="margin: 0 auto; width: 70%;"> 
    <asp:GridView ID="QuestionsGridView" CssClass="gridView" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" Width="100%" CellPadding="4" ForeColor="#333333"> 
     <Columns> 
      <asp:BoundField DataField="QUESTION_NUMBER" ReadOnly="true" HeaderText="Question Number" SortExpression="QUESTION_NUMBER" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center" /> 
      <asp:TemplateField HeaderText="Question" SortExpression="QUESTION" HeaderStyle-HorizontalAlign="Center"> 
       <EditItemTemplate> 
        <asp:TextBox ID="EditQuestionBox" runat="server" Height="50px" Text='<%# Bind("QUESTION") %>' TextMode="MultiLine" Width="99%" CssClass="multilineTBox" Columns="1" Rows="2"></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("QUESTION") %>'></asp:Label> 
       </ItemTemplate> 
       <ControlStyle Width="99%" /> 
      </asp:TemplateField> 
      <asp:BoundField DataField="CAT_NAME" ReadOnly="true" HeaderText="Category" SortExpression="CAT_NAME" HeaderStyle-HorizontalAlign="Center" /> 
      <asp:BoundField DataField="QUES_ORDER" ReadOnly="true" HeaderText="Order in Category" SortExpression="QUES_ORDER" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center" /> 
      <asp:CommandField CausesValidation="False" HeaderText="Edit" ShowEditButton="True" ControlStyle-Width="4em" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center" /> 
     </Columns> 
     <EditRowStyle BackColor="#2461BF" /> 
     <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle BackColor="#a0a0a0" Font-Bold="True" ForeColor="White" BorderStyle="Solid" BorderColor="Black" BorderWidth="1px" HorizontalAlign="Center" /> 
     <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#ffffff" BorderStyle="Solid" BorderColor="Black" BorderWidth="1px" /> 
     <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
     <SortedAscendingCellStyle BackColor="#F5F7FB" /> 
     <SortedAscendingHeaderStyle BackColor="#6D95E1" /> 
     <SortedDescendingCellStyle BackColor="#E9EBEF" /> 
     <SortedDescendingHeaderStyle BackColor="#4870BE" /> 
    </asp:GridView> 
</div> 

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Corp_TaxConnectionString %>" 
    SelectCommand="SELECT tq.id, tq.question, tq.ques_order, tc.cat_name, tq.question_number FROM t01_tax_questions AS tq INNER JOIN t01_tax_categories AS tc ON tq.category = tc.cat_order ORDER BY tq.question_number" 
    UpdateCommand="UPDATE t01_tax_questions SET question = @question WHERE question_number = @question_number"> 
    <UpdateParameters> 
     <asp:Parameter Name="question_number" Type="Int32" /> 
     <asp:Parameter Name="question" Type="String" /> 
     <asp:Parameter Name="id" Type="Int32" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

그리고 테이블 :

여기 내 마크 업입니다 SQLServer Table

편집 :

보고 후, 내 EditItemTemplate에, 나는 텍스트 상자에 질문을 결합한다. 원래 질문을 업데이트하려고 시도하기 전에 텍스트 상자에 다시 데이터 바인딩되는 업데이트 단추를 클릭 한 후 가능합니까? 이 경우, 어떻게 그 문제를 해결할 수 있습니까?

+0

잘 모르겠다면 (또는 인터페이스에있는 모든 SQL에 익숙하지 않은 경우) 그러나 이상한 점은 Gridview 필드가 sqldata 소스와 다른 경우입니다. 편집 : MSDN 링크 https://msdn.microsoft.com/en-us/library/z72eefad.aspx – Robin

+0

예, 긴 이야기가 있습니다. 그러나 모두 일치하도록 사례를 변경하면 문제가 해결되지 않습니다. –

+0

이 새로운 코드입니까? 이 모든 것을 직접 쓰셨습니까? 아니면 기존 애플리케이션을 지원합니까? – mason

답변

0

더 자세히 살펴보면 GridView 태그에서 매우 중요한 "DataKeyNames"특성을 잊어 버린 것을 알았습니다. 나는 정말 바보 같아. 다음은 새로운 작업 코드입니다.

<div class="divGrid" style="margin: 0 auto; width: 70%;"> 
    <asp:GridView ID="QuestionsGridView" CssClass="gridView" runat="server" AutoGenerateColumns="False" Width="100%" DataKeyNames="ID, QUESTION_NUMBER" DataSourceID="SqlDataSource1"> 
     <Columns> 
      <asp:BoundField DataField="question_number" HeaderText="Question Number" SortExpression="question_number" ReadOnly="True" ItemStyle-HorizontalAlign="Center" /> 
      <asp:BoundField DataField="question" HeaderText="Question" SortExpression="question" > 
       <ControlStyle Width="100%" Height="80%" /> 
      </asp:BoundField> 
      <asp:BoundField DataField="cat_name" HeaderText="Category" SortExpression="cat_name" ItemStyle-HorizontalAlign="Center"> 
       <ControlStyle Height="80%" /> 
      </asp:BoundField> 
      <asp:BoundField DataField="ques_order" HeaderText="Question Order" SortExpression="ques_order" ReadOnly="True" ItemStyle-HorizontalAlign="Center" /> 
      <asp:CommandField HeaderText="Edit" ShowEditButton="True" CausesValidation="False" HeaderStyle-Width="4%" ItemStyle-HorizontalAlign="Center"/> 
      <asp:CommandField HeaderText="Delete" ShowDeleteButton="True" CausesValidation="False" HeaderStyle-Width ="4%" ItemStyle-HorizontalAlign="Center" /> 
     </Columns> 
     <EditRowStyle BackColor="Yellow" Width="100%" /> 
     <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle BackColor="#a0a0a0" Font-Bold="True" ForeColor="White" BorderStyle="Solid" BorderColor="Black" BorderWidth="1px" HorizontalAlign="Center" /> 
     <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#ffffff" BorderStyle="Solid" BorderColor="Black" BorderWidth="1px" /> 
     <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
     <SortedAscendingCellStyle BackColor="#F5F7FB" /> 
     <SortedAscendingHeaderStyle BackColor="#6D95E1" /> 
     <SortedDescendingCellStyle BackColor="#E9EBEF" /> 
     <SortedDescendingHeaderStyle BackColor="#4870BE" /> 
    </asp:GridView> 

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Corp_TaxConnectionString %>" SelectCommand="SELECT 
     tq.id, tq.question_number, tq.question, tc.cat_name, tq.ques_order 
     FROM 
     t01_tax_questions AS tq 
     INNER JOIN 
     t01_tax_categories AS tc 
     ON 
     tq.category = tc.cat_order 
     ORDER BY tq.question_number" 

     DeleteCommand="DELETE 
     FROM 
     t01_tax_questions 
     WHERE 
     question_number = @question_number" 

     UpdateCommand="UPDATE 
     t01_tax_questions 
     SET 
     question = @question 
     WHERE 
     id = @id"> 

     <DeleteParameters> 
      <asp:Parameter Name="@question_number" /> 
     </DeleteParameters> 
     <UpdateParameters> 
      <asp:Parameter Name="@question"/> 
      <asp:Parameter Name="@id" /> 
     </UpdateParameters> 
    </asp:SqlDataSource> 

그것은이 모든 MSDN Documentation

에 설명이 쳐다 보면서 노력하는 모든 사람에게 감사합니다.