为什么我的GridView更新?

时间:2017-10-09 20:59:52

标签: sql asp.net 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中,我将问题绑定到文本框。是否有可能在我单击更新按钮后,原始问题在尝试更新之前再次数据绑定到文本框?如果是这种情况,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在深入研究之后,我意识到我已经忘记了显然非常重要的&#34; DataKeyNames&#34;我的GridView标记中的属性。我觉得自己真傻。这是新的工作代码。

    <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

中解释

感谢所有看过这个并尝试过的人。