简体   繁体   中英

Why update on gridview is not updating the database in my asp.net c# web forms application?

I have read through several posts on SO as well as other sites, but I can't seem to find the fix for my problem. I have a gridview in which I use a dropdown list in the EditItem template of a field. When I press the Update button the gridview doesn't update the database.

Here is the sql data source and gridview that I'm using:

    <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>

I went through and made sure I have the primary key of the database table to be updated set as the DataKeyName for the gridview. I'm not sure if anything is wrong in the UpdateCommand, but it appears to be correct.

You need to Databind your GridView again.

So, I will say, declare the RowUpdating command on your Grid, and then, in the code behind, in the event handler for the RowUpdating event, bind your gridview to your datasource again, as below.

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

In the gridview I replaced doc_rvw_id_pk from tbl_doc_rvw with the foreign key doc_rvw_id_fk from tbl_doc_rvw_sub, which is the table that I was updating. It now works.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM