【问题标题】:Why update on gridview is not updating the database in my asp.net c# web forms application?为什么 gridview 上的更新不会更新我的 asp.net c# web 表单应用程序中的数据库?
【发布时间】:2015-10-19 22:41:38
【问题描述】:

我已经阅读了 SO 以及其他网站上的几篇文章,但我似乎无法找到解决我的问题的方法。我有一个gridview,我在其中使用字段的EditItem 模板中的下拉列表。当我按下更新按钮时,gridview 不会更新数据库。

这是我正在使用的sql数据源和gridview:

    <asp:HiddenField ID="hdn_crnt_user" runat="server" />

<asp:SqlDataSource ID="sdc_gv_queue" runat="server" 
    ConnectionString='<%$ ConnectionStrings:ConnectionString %>' 
    OldValuesParameterFormatString="original_{0}" 
    SelectCommand="SELECT tv.vendor_nm
        ,tv.vendor_id_pk
        ,td.doc_title
        ,td.doc_id_pk
        ,tdr.doc_rvw_id_pk
        ,tdrs.doc_rvw_sub_id_pk
        ,tdrs.doc_rvw_sub_dt
        ,tdrs.doc_rvw_sub_status_list
        ,tsl.rvw_status AS txt_rvw_status
        FROM tbl_vendor tv
        INNER JOIN tbl_doc td
        ON tv.vendor_id_pk=td.vendor_id_fk
        INNER JOIN tbl_doc_rvw tdr
        ON td.doc_id_pk=tdr.doc_id_fk
        INNER JOIN tbl_doc_rvw_sub tdrs
        ON tdr.doc_rvw_id_pk=tdrs.doc_rvw_id_fk
        INNER JOIN tbl_ad_users tau
        ON tau.domain_user=tdrs.doc_rvw_sub_domain_user
        INNER JOIN tbl_status_list tsl
        ON tdrs.doc_rvw_sub_status_list=tsl.rvw_status_id_pk
        WHERE ((tdrs.doc_rvw_sub_status_list IN (2, 4)) AND ([doc_rvw_sub_domain_user] = @doc_rvw_sub_domain_user))"
        UpdateCommand="
            UPDATE [tbl_doc_rvw_sub] 
            SET [doc_rvw_sub_status_list] = @doc_rvw_sub_status_list 
            WHERE [doc_rvw_sub_status_list] = @original_doc_rvw_sub_status_list AND [doc_rvw_sub_id_pk] = @original_doc_rvw_sub_id_pk">
    <SelectParameters>
        <asp:ControlParameter ControlID="hdn_crnt_user" PropertyName="Value" Name="doc_rvw_sub_domain_user" Type="String"></asp:ControlParameter>
    </SelectParameters>
    <UpdateParameters>             
        <asp:Parameter Name="original_doc_rvw_sub_id_pk" type="Int32" />                      
        <asp:Parameter Name="original_doc_rvw_sub_status_list" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>

<asp:GridView 
    ID="gv_queue" 
    runat="server" 
    DataSourceID="sdc_gv_queue" 
    DataKeyNames="doc_rvw_sub_id_pk"
    AllowPaging="True" 
    AllowSorting="True" 
    AutoGenerateColumns="False">
    <Columns>
        <asp:CommandField ShowSelectButton="True" ShowEditButton="True"></asp:CommandField>
        <asp:BoundField DataField="vendor_nm" HeaderText="Vendor" SortExpression="vendor_nm" HeaderStyle-CssClass="gv_hdr_style" ReadOnly="true" >
            <HeaderStyle CssClass="gv_hdr_style"></HeaderStyle>
        </asp:BoundField>
        <asp:BoundField DataField="vendor_id_pk" HeaderText="Vendor ID" InsertVisible="False" SortExpression="vendor_id_pk" HeaderStyle-CssClass="gv_hdr_style" ReadOnly="true">
            <HeaderStyle CssClass="gv_hdr_style"></HeaderStyle>
            <ItemStyle HorizontalAlign="Center" />
        </asp:BoundField>
        <asp:BoundField DataField="doc_title" HeaderText="Document" SortExpression="doc_title" HeaderStyle-CssClass="gv_hdr_style" ReadOnly="true"  >
            <HeaderStyle CssClass="gv_hdr_style"></HeaderStyle>
        </asp:BoundField>
        <asp:BoundField DataField="doc_id_pk" HeaderText="Doc. ID" InsertVisible="False" SortExpression="doc_id_pk" HeaderStyle-CssClass="gv_hdr_style" ReadOnly="true">
            <HeaderStyle CssClass="gv_hdr_style"></HeaderStyle>
            <ItemStyle HorizontalAlign="Center" />
        </asp:BoundField>
        <asp:BoundField DataField="doc_rvw_id_pk" HeaderText="Review" InsertVisible="False" SortExpression="doc_rvw_id_pk" HeaderStyle-CssClass="gv_hdr_style" ReadOnly="true">
            <HeaderStyle CssClass="gv_hdr_style"></HeaderStyle>
            <ItemStyle HorizontalAlign="Center" />
        </asp:BoundField>
        <asp:BoundField DataField="doc_rvw_sub_id_pk" HeaderText="Submission" InsertVisible="False" SortExpression="doc_rvw_sub_id_pk" HeaderStyle-CssClass="gv_hdr_style" ReadOnly="true">
            <HeaderStyle CssClass="gv_hdr_style"></HeaderStyle>
            <ItemStyle HorizontalAlign="Center" />
        </asp:BoundField>
        <asp:BoundField DataField="doc_rvw_sub_dt" HeaderText="Date Submitted" DataFormatString="{0:MM/dd/yyyy}" SortExpression="doc_rvw_sub_dt" HeaderStyle-CssClass="gv_hdr_style" ReadOnly="true">
            <HeaderStyle CssClass="gv_hdr_style"></HeaderStyle>
            <ItemStyle HorizontalAlign="Center" />
        </asp:BoundField>
        <asp:TemplateField HeaderText="Submission Status"  HeaderStyle-CssClass="gv_hdr_style" SortExpression="doc_rvw_sub_status_list">
            <EditItemTemplate>
                <asp:DropDownList 
                    ID="DropDownList1" 
                    runat="server" 
                    DataSourceID="sdc_doc_rvw_sub_status_list" 
                    DataTextField="rvw_status" 
                    DataValueField="rvw_status_id_pk"
                    AppendDataBoundItems="true"
                    SelectedValue='<%# Bind("doc_rvw_sub_status_list") %>'>
                        <asp:ListItem Value="">Please Select</asp:ListItem>
                </asp:DropDownList>
                <asp:SqlDataSource 
                    ID="sdc_doc_rvw_sub_status_list" 
                    runat="server" 
                    ConnectionString='<%$ ConnectionStrings:ConnectionString %>' 
                    SelectCommand="SELECT [rvw_status_id_pk], [rvw_status] FROM tbl_status_list WHERE [rvw_status_active_yn] = '3'"/>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("txt_rvw_status") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    <EditRowStyle BackColor="#BCC7D9" Font-Bold="true" HorizontalAlign="Center" />
    <FooterStyle BackColor="#044C92" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#044C92" Font-Bold="True" ForeColor="White" HorizontalAlign="Center" />
    <PagerSettings Mode="NumericFirstLast" />
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#EFF3FB" HorizontalAlign="Center" />
    <SelectedRowStyle BackColor="#BCC7D9" Font-Bold="True" ForeColor="#333333" />
    <SortedAscendingCellStyle BackColor="#F5F7FB" />
    <SortedAscendingHeaderStyle BackColor="#6D95E1" />
    <SortedDescendingCellStyle BackColor="#E9EBEF" />
    <SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>

我检查并确保将要更新的数据库表的主键设置为网格视图的 DataKeyName。我不确定 UpdateCommand 中是否有任何问题,但它似乎是正确的。

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    你需要重新绑定你的 GridView。

    所以,我会说,在您的 Grid 上声明 RowUpdating 命令,然后在后面的代码中,在 RowUpdating 事件的事件处理程序中,再次将您的 gridview 绑定到您的数据源,如下所示。

    protected void gv_queue_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        //GridViewRow row = (GridViewRow)gv_queue.Rows[e.RowIndex];
        gv_queue.DataBind();
    }
    

    【讨论】:

    • 感谢您的快速响应,但很遗憾没有成功。
    • 你有什么错误吗?您是否在事件中设置了断点以确保它被调试器命中?
    • 我得到的只是程序 '[28000] iexplore.exe' 已退出,代码为 -1 (0xffffffff)。
    • 对不起,前面的注释是错误的行...线程 0x59f0 已退出,代码为 259 (0x103)。
    • 嗯,这说明你的服务器上的某个线程已经退出,不知道是什么原因。
    【解决方案2】:

    在 gridview 中,我将 tbl_doc_rvw 中的 doc_rvw_id_pk 替换为 tbl_doc_rvw_sub 中的外键 doc_rvw_id_fk,这是我正在更新的表。现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多