详细信息视图更新不起作用

本文关键字:不起作用 更新 视图 详细信息 | 更新日期: 2023-09-27 18:36:25

我用谷歌搜索了所有地方,但没有明确的答案我正在尝试使用以下代码使用详细信息视图更新记录:

        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        AllowSorting="True" AutoGenerateColumns="False" 
        BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" 
        CellPadding="2" DataKeyNames="Rec_ID" DataSourceID="ContactsMasterDS" 
        ForeColor="Black" GridLines="None" PageSize="3">
        <AlternatingRowStyle BackColor="PaleGoldenrod" />
        <Columns>
            <asp:CommandField ShowSelectButton="True" />
            <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
            <asp:BoundField DataField="Full_Name" HeaderText="Full_Name" SortExpression="Full_Name" />
            <asp:BoundField DataField="Gender" HeaderText="Gender" SortExpression="Gender" />
            <asp:BoundField DataField="AgeGroup" HeaderText="AgeGroup" SortExpression="AgeGroup" />
            <asp:BoundField DataField="Nationality" HeaderText="Nationality" SortExpression="Nationality" />
            <asp:BoundField DataField="Occupation" HeaderText="Occupation" SortExpression="Occupation" />
            <asp:BoundField DataField="Resident" HeaderText="Resident" SortExpression="Resident" />
        </Columns>
        <FooterStyle BackColor="Tan" />
        <HeaderStyle BackColor="Tan" Font-Bold="True" />
        <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
        <SortedAscendingCellStyle BackColor="#FAFAE7" />
        <SortedAscendingHeaderStyle BackColor="#DAC09E" />
        <SortedDescendingCellStyle BackColor="#E1DB9C" />
        <SortedDescendingHeaderStyle BackColor="#C2A47B" />
    </asp:GridView>
    <asp:SqlDataSource ID="ContactsMasterDS" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
        ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
        SelectCommand="Select * from Contacts"></asp:SqlDataSource>
    <br />
    <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
        DataKeyNames="Rec_ID" DataSourceID="ContactsDetailsDS" Height="50px" 
        Width="545px" onitemupdated="DetailsView1_ItemUpdated">
        <Fields>
            <asp:BoundField DataField="Rec_ID" HeaderText="Rec_ID" ReadOnly="True" SortExpression="Rec_ID" />
            <asp:BoundField DataField="Gender" HeaderText="Gender" SortExpression="Gender" />
            <asp:BoundField DataField="AgeGroup" HeaderText="AgeGroup" SortExpression="AgeGroup" />
            <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
            <asp:BoundField DataField="Full_Name" HeaderText="Full_Name" SortExpression="Full_Name" />
            <asp:BoundField DataField="DOB" HeaderText="DOB" SortExpression="DOB" />
            <asp:BoundField DataField="Phone_No" HeaderText="Phone_No" SortExpression="Phone_No" />
            <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
            <asp:BoundField DataField="Nationality" HeaderText="Nationality" SortExpression="Nationality" />
            <asp:BoundField DataField="Account_No" HeaderText="Account_No" SortExpression="Account_No" />
            <asp:BoundField DataField="Occupation" HeaderText="Occupation" SortExpression="Occupation" />
            <asp:BoundField DataField="Resident" HeaderText="Resident" SortExpression="Resident" />
            <asp:BoundField DataField="Room_No" HeaderText="Room_No" SortExpression="Room_No" />
            <asp:BoundField DataField="Last_Branch" HeaderText="Last_Branch" SortExpression="Last_Branch" />
            <asp:BoundField DataField="Last_Date" HeaderText="Last_Date" SortExpression="Last_Date" />
            <asp:BoundField DataField="Last_Time" HeaderText="Last_Time" SortExpression="Last_Time" />
            <asp:CheckBoxField DataField="isComplete" HeaderText="isComplete" SortExpression="isComplete" />
            <asp:CommandField ShowEditButton="True" />
        </Fields>
    </asp:DetailsView>
    <asp:SqlDataSource ID="ContactsDetailsDS" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
        ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
        SelectCommand="Select * from Contacts where [Rec_ID] = @Rec_ID" 
        UpdateCommand="Update Contacts Set Room_No=@Room_No Where Rec_ID=@Rec_ID" >
        <SelectParameters>
            <asp:ControlParameter ControlID="GridView1" Name="Rec_ID" PropertyName="SelectedValue" />
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="Room_No" Type="String" />
            <asp:Parameter Name="Rec_ID" Type="String" DefaultValue="0" />
        </UpdateParameters>
    </asp:SqlDataSource>

当我将 where 子句更改为"Where Rec_ID = 2"时它可以工作,但是当使用参数时,它不会执行所需的更新请提供任何帮助

详细信息视图更新不起作用

    private void OnDetailsViewItemUpdating(object sender, DetailsViewUpdateEventArgs e) {
        if (String.Equals((string)e.NewValues["firstName"], "john", StringComparison.OrdinalIgnoreCase)) {
            // "John" is not a valid name, so change it to "Steve":
            e.NewValues["firstName"] = "Steve";
        }
        if (String.Equals((string)e.NewValues["lastName"], "doe", StringComparison.OrdinalIgnoreCase)) {
            // If "Doe" is the last name, cancel the whole operation
            e.Cancel = true;
        }
}

你必须写"OnItemUpdate"而不是onitemupdate。检查案例。

希望这对你有帮助。控件的 ItemUpdating 事件具有包含原始数据(如果可用)以及用户键入的新数据的参数。下面是如何检查数据并选择性地修改数据的示例

我找到了如下解决方案:

1-在where子句中:例如,将Rec_ID更改为任何其他名称,例如ID。

之前: UpdateCommand="Update Contacts Set Room_No=@Room_No Where [Rec_ID]=@Rec_ID">

之后 : UpdateCommand="Update Contacts Set Room_No=@Room_No Where [Rec_ID]=@ID">

2-在更新参数中获取ID的值,如下所示:

之前: <asp:Parameter Name="Rec_ID" Type="Int32" />

之后:<asp:ControlParameter ControlID="DetailsView1" Name="ID" PropertyName="SelectedValue" />

这将允许您将Rec_ID保持为只读,甚至从详细信息视图中删除隐藏它

谢谢大家