Невозможно редактировать строки в элементе управления GridView - PullRequest
0 голосов
/ 15 октября 2018

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

Это мой 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" DataKeyNames="SID">
        <Columns>
            <asp:CommandField ShowEditButton="True" />
            <asp:BoundField DataField="SID" HeaderText="Student ID" ReadOnly="True" SortExpression="SID" />
            <asp:BoundField DataField="S_FName" HeaderText="First Name" SortExpression="S_FName" />
            <asp:BoundField DataField="S_LName" HeaderText="Last Name" SortExpression="S_LName" />
            <asp:BoundField DataField="Atd_Date" HeaderText="Date" SortExpression="Atd_Date" />
            <asp:BoundField DataField="Atd_InTime" HeaderText="In Time" SortExpression="Atd_InTime" />
            <asp:BoundField DataField="Atd_OutTime" HeaderText="Out Time" SortExpression="Atd_OutTime" />
            <asp:BoundField DataField="Atd_Comment" HeaderText="Comment" SortExpression="Atd_Comment" />
            <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" />
        </Columns>
        <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
        <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
        <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
        <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
        <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#FFF1D4" />
        <SortedAscendingHeaderStyle BackColor="#B95C30" />
        <SortedDescendingCellStyle BackColor="#F1E5CE" />
        <SortedDescendingHeaderStyle BackColor="#93451F" />
    </asp:GridView>

Как вы можете видеть выше, я использую SqlDataSource1 для извлечения данных в GridView:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:SAOS1ConnectionString %>" 
        SelectCommand="SELECT 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="updatetable1" 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>

Для UPDATE оператор, я использую Stored Procured с именем updatetable1 :

    CREATE PROCEDURE [dbo].[updatetable1]
(
    @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
RETURN

Когда я нажимаю Редактировать ссылку в GridView, столбцы из таблицы student, такие как SID, S_FName & S_LName успешно обновлены.

Но остальные столбцы таблицы attendance не могут быть успешно обновлены .Изменения остаются прежними.Пожалуйста, ПОМОГИТЕ

1 Ответ

0 голосов
/ 16 октября 2018

Согласно определению GridView, есть свойство с именем DataKeyNames, в котором вы можете задать имя ключевого (ых) поля (ей), которое позволяет автоматически обновлять / удалять строки, содержащиеся в нем.Вот краткое объяснение от DataKeyNames свойство :

Вы должны установить это свойство только для поля или полей, которые необходимы для уникальной идентификации каждой строки;например, столбец ID, если целое значение однозначно идентифицирует каждую строку.Вы должны установить свойство DataKeyNames для автоматического обновления и удаления функций элемента управления GridView.

Исходя из текущего состояния GridView, возможно, вам могут потребоваться как первичные, так и внешние ключи attendance и student таблица для включения автоматического обновления, как описано выше:

<asp:GridView ID="GridView1" runat="server" CssClass="auto-style36" AllowPaging="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" 
              DataKeyNames="Atd_ID,SID" ...>
</asp:GridView>

Также не забудьте добавить Atd_ID в качестве первичного ключа таблицы attendance в набор результатов SqlDataSource:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:SAOS1ConnectionString %>"
            SelectCommand="SELECT attendance.Atd_ID, ..., student.SID, ..." 
            UpdateCommand="updatetable1" UpdateCommandType="StoredProcedure">
</asp:SqlDataSource>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...