Редактируемый элемент управления GridView для нескольких таблиц - PullRequest
0 голосов
/ 10 октября 2018

Я извлекаю данные нескольких таблиц из SQL Server в элемент управления GridView.Я могу показывать столбцы из разных таблиц в GridView, и я хотел бы сделать его редактируемым для пользователей.Но у меня небольшая проблема с этим.

Правка ссылки в Gridview работает нормально, я могу вносить изменения в каждый столбец.Но сделанные мной изменения не обновляются , когда я нажимаю ссылку Обновить.Итак, это мой HTML-код элемента управления GridView , как показано ниже:

<asp:GridView ID="GridView1" runat="server" CssClass="auto-style36" AllowPaging="True" AutoGenerateColumns="False" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2" DataSourceID="SqlDataSource1">
    <Columns>
        <asp:CommandField ShowEditButton="True" />
        <asp:BoundField DataField="Atd_ID" HeaderText="Atd_ID" SortExpression="Atd_ID" InsertVisible="False" ReadOnly="True" />
        <asp:BoundField DataField="Atd_Date" HeaderText="Atd_Date" SortExpression="Atd_Date" />
        <asp:BoundField DataField="Atd_InTime" HeaderText="Atd_InTime" SortExpression="Atd_InTime" />
        <asp:BoundField DataField="Atd_OutTime" HeaderText="Atd_OutTime" SortExpression="Atd_OutTime" />
        <asp:BoundField DataField="Atd_Comment" HeaderText="Atd_Comment" SortExpression="Atd_Comment" />
        <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" />
        <asp:BoundField DataField="SID" HeaderText="SID" SortExpression="SID" />
        <asp:BoundField DataField="S_FName" HeaderText="S_FName" SortExpression="S_FName" />
        <asp:BoundField DataField="S_LName" HeaderText="S_LName" SortExpression="S_LName" />
    </Columns>

</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:SAOS1ConnectionString %>" SelectCommand="SELECT attendance.Atd_ID,attendance.Atd_Date, attendance.Atd_InTime, attendance.Atd_OutTime, attendance.Atd_Comment, attendance.Status, student.SID, student.S_FName, student.S_LName FROM student LEFT OUTER JOIN attendance ON student.SID = attendance.SID AND attendance.Atd_Date = @Atd_Date LEFT OUTER JOIN class ON student.CID = class.CID WHERE (class.CID = @CID)" UpdateCommand="updatetable5" UpdateCommandType="StoredProcedure">
    <SelectParameters>
        <asp:ControlParameter ControlID="datepicker" Name="Atd_Date" PropertyName="Text" />
        <asp:ControlParameter ControlID="LabelClassID" Name="CID" PropertyName="Text" />
    </SelectParameters>
    <UpdateParameters>
        <asp:Parameter Name="Atd_ID" Type="Int32" />
        <asp:Parameter DbType="Date" Name="Atd_Date" />
        <asp:Parameter DbType="Time" Name="Atd_InTime" />
        <asp:Parameter DbType="Time" Name="Atd_OutTime" />
        <asp:Parameter Name="Atd_Comment" Type="String" />
        <asp:Parameter Name="Status" Type="String" />
        <asp:Parameter Name="SID" Type="Int32" />
        <asp:Parameter Name="S_FName" Type="String" />
        <asp:Parameter Name="S_LName" Type="String" />
    </UpdateParameters>
</asp:SqlDataSource>

И это моя хранимая процедура для обновления таблицы attendance & student, яПоверьте, проблема начинается здесь.

USE [SAOS1]
GO
CREATE PROCEDURE [dbo].[updatetable2]
(
    @Atd_ID int,
    @Atd_Date date,
    @Atd_InTime time(7),
    @Atd_OutTime time(7),
    @Atd_Comment varchar(50),
    @Status varchar(50),
    @SID int,
    @S_FName varchar(50),
    @S_LName varchar(50)
)
AS
BEGIN
UPDATE attendance SET Atd_Date=@Atd_Date, Atd_InTime=@Atd_InTime, Atd_OutTime=@Atd_OutTime, Atd_Comment=@Atd_Comment, Status=@Status WHERE Atd_ID=@Atd_ID
UPDATE student SET S_FName=@S_FName, S_LName=@S_LName WHERE SID=@SID
END

WHERE CLAUSE в строке ниже, которая является Atd_ID=@Atd_ID, является автоматически генерируемыми ключами .Это причина того, что я не могу обновить свои изменения в элементе управления GridView?Я несколько раз пытался изменить предложение WHERE, gridview позволяет мне вносить изменения, хотя результат не тот, который я хочу.

UPDATE attendance SET Atd_Date=@Atd_Date, Atd_InTime=@Atd_InTime, Atd_OutTime=@Atd_OutTime, Atd_Comment=@Atd_Comment, Status=@Status where Atd_ID=@Atd_ID

...