【发布时间】:2019-03-20 01:32:51
【问题描述】:
我正在尝试将 2 个表的数据从 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 语句,我使用名为 updatetable1 的 Stored Procured:
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 中单击 Edit link 时,表 student 中的列(例如 SID、S_FName 和 S_LName)已成功更新。
但表 attendance 中的其余列无法成功更新。更改保持不变。请帮忙
【问题讨论】:
-
您的结果集不包含
Atd_ID,因此没有有效值可传递给存储过程。 -
@SeanLange 我想让表 attendance 中的所有列都可供用户编辑。你是什么意思只更新两列?我在 SP 中设置了多个列,对吗?
-
@Crowcoder 但我不能真正更新列 Atd_ID 因为它是一个标识列
-
想一想,数据源如何知道要向更新命令发送什么id?我认为您需要做的就是将
Atd_ID添加到 select 语句中:SelectCommand="SELECT attendance.Atd_ID, attendance.Atd_Date, ...... -
您可能还需要将其添加到 DataKeyNames。我不记得 WebForms 的细节(或者我会写一个答案),但我可以看到你的命令无法知道要使用什么 id。
标签: c# asp.net sql-server stored-procedures gridview