我正在尝试从Microsoft SQL Server检索2个表的数据到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 语句,我正在使用名为 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
中的其余列无法成功更新。所做的更改保持不变。请帮助
答案 0 :(得分:0)
根据GridView
的定义,有一个名为DataKeyNames
的属性,您可以在其中设置键字段的名称,从而可以自动更新/删除其中的行。这是DataKeyNames
property的简要说明:
您应仅将此属性设置为一个或多个 需要唯一标识每一行;例如,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>