2017-10-09 58 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

EDIT:

見た後、私の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

に説明されているが、このを見てみましたすべての人に感謝します。

関連する問題