2010-07-29 92 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