2010-07-29 96 views
1

我必须结合SQL数据源,并添加字段更新网格视图数据网格视图,但它没有做任何更新,并没有错误出现,我不知道哪里出错网格视图更新

SQL存储过程:

ALTER proc [dbo].[GetNewswithType] 
As 
Begin 
Select News.Id,News.Type_Id, 
News.Header,News.HText,News.DText,News.Active,News.Add_Date, 
NewsType.Type_AR,NewsType.Type_EN 
From News 
Inner Join NewsType On 
NewsType.Id=News.Type_Id 
End 

ALTER Proc [dbo].[UpdateNews] 
(
@Id Int 
,@Header Nvarchar(50) 
,@HText Nvarchar(Max) 
,@DText Nvarchar(Max) 
,@Type_Id Int 
,@Active Bit 

) 
AS 
BEGIN 
Update News Set 

@Header =Header 
,@HText =HText 
,@DText =DText 
,@Type_Id=Type_Id 
,@Active =Active 

WHERE @Id=Id 
END 

ASPX页面:

<div class="m10"> 
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     BackColor="White" BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" 
     CellPadding="4" DataKeyNames="Id" DataSourceID="SDSNews" ForeColor="Black" 
     GridLines="Vertical" 
     onselectedindexchanged="GridView1_SelectedIndexChanged" 
     onselectedindexchanging="GridView1_SelectedIndexChanging" 
      onpageindexchanging="GridView1_PageIndexChanging" AllowPaging="True" 
      onrowupdated="GridView1_RowUpdated" 
      onrowdatabound="GridView1_RowDataBound"> 
     <FooterStyle BackColor="#CCCC99" /> 
     <RowStyle BackColor="#F7F7DE" /> 
     <Columns> 
      <asp:CommandField HeaderText="Function" ShowEditButton="True" /> 
      <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" 
       Visible="False" /> 
      <asp:BoundField DataField="Header" HeaderText="Header" 
       SortExpression="Header" /> 
      <asp:BoundField DataField="HText" HeaderText="HomeText" 
       SortExpression="HText" /> 
      <asp:BoundField DataField="DText" HeaderText="DetailsText" 
       SortExpression="DText" /> 
      <asp:BoundField DataField="Type_Id" HeaderText="TypeNumber" 
       SortExpression="Type_Id" /> 
      <asp:BoundField DataField="Type_AR" HeaderText="Type_AR" 
       SortExpression="Type_AR" InsertVisible="False" ReadOnly="True" /> 
      <asp:BoundField DataField="Type_EN" HeaderText="Type_EN" 
       SortExpression="Type_EN" InsertVisible="False" ReadOnly="True" /> 
      <asp:CheckBoxField DataField="Active" HeaderText="Active" 
       SortExpression="Active" /> 
      <asp:BoundField DataField="Add_Date" HeaderText="Add_Date" 
       SortExpression="Add_Date" InsertVisible="False" ReadOnly="True" /> 
     </Columns> 
     <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" /> 
     <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" /> 
     <AlternatingRowStyle BackColor="White" /> 
    </asp:GridView> 
     <asp:SqlDataSource ID="SDSNews" runat="server" 
      ConnectionString="Data Source=ELARABY-1EACFA3\SQLEXPRESS;Initial Catalog=ElarabyGroup;Integrated Security=True" 
      ProviderName="System.Data.SqlClient" SelectCommand="GetNewswithType" 
      SelectCommandType="StoredProcedure" UpdateCommand="UpdateNews" 
      UpdateCommandType="StoredProcedure"> 
      <UpdateParameters> 
       <asp:ControlParameter ControlID="GridView1" Name="Id" 
        PropertyName="SelectedValue" Type="Int32" /> 
       <asp:ControlParameter ControlID="GridView1" Name="Header" 
        PropertyName="SelectedValue" Type="String" /> 
       <asp:ControlParameter ControlID="GridView1" Name="HText" 
        PropertyName="SelectedValue" Type="String" /> 
       <asp:ControlParameter ControlID="GridView1" Name="DText" 
        PropertyName="SelectedValue" Type="String" /> 
       <asp:ControlParameter ControlID="GridView1" Name="Type_Id" 
        PropertyName="SelectedValue" Type="Int32" /> 
       <asp:ControlParameter ControlID="GridView1" Name="Active" 
        PropertyName="SelectedValue" Type="Boolean" /> 
      </UpdateParameters> 
     </asp:SqlDataSource> 
    </div> 

回答

1

添加一些代码到你的更新程序,以确定是否它被称为:

  1. 创建一个名为Logging有一个名为Message柱(再次,或您选择的任何名称)
  2. UpdateNews过程添加一行INSERT INTO [dbo].[Logging] (Message) VALUES ('Procedure Called')表(或您选择的任何名称)。如果你愿意,你可以记录传入参数的值。

通过这样做,您可以确定存储过程是否实际上被调用。另一种选择是使用Sql Server Profiler来确定这一点。如果你可以确定它调用存储过程,那么在那里出了问题,并通过记录参数你可以“手动调用”它来找出原因。

更可能的是存储过程永远不会被调用,你如何告诉网格将变化持续存储到数据库?看看this tutorial,我会建议你的更新不会触发“保存”。

+0

我做到了,消息是('Procedure Called'),但是我无法知道它的问题 – Myworld 2010-07-29 12:31:49

+0

您需要按照我在第2点中所建议的那样调整INSERT INTO行,以便它存储所有传递的参数到日志表中。这样,您可以使用记录的值来手动调用过程并确定发生了什么问题。简而言之,如果程序被确定地调用,程序很可能有问题。 – Rob 2010-07-29 13:06:03

+0

我忘了告诉你,新闻表有ForIgn键(Type_Id)表NewsType(Id)主键 – Myworld 2010-07-29 13:37:38