为什么我的GridView没有更新?

问题描述:

我试图更新'问题'字段,当我点击'更新'按钮的特定行。当我点击'编辑'按钮时,我可以改变文本,但是当我点击'更新'按钮时,它会恢复到原来的值。数据库中也没有任何变化。为什么我的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

进一步研究之后,我意识到我忘记了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

所有解释谢谢所有谁看着这个和审判。