2012-11-21 21 views
1

進出口比較新的asp.net和這樣的GridView和林有很難完成以下任務: T的在我的數據庫三個表:GridView控件更新和刪除語句損壞

Bookings  
    -------------------------------------------------------- 
    id | start_date | end_date | user_id | pet_id 
    ----|---------------|--------------|-----------|-------- 
    1 | 01/04/2011 | 01/04/2011 |  1  | 2 
    -------------------------------------------------------- 

    Pets  
    --------------------------------------------------------- 
    id | name  | species | owner_id | caretaker_id 
    -----|-------------|----------|------------|------------- 
     1 | samplename | dog |  1  |  2 
    --------------------------------------------------------- 

    Users  
    ------------------------------------------------------------------------ 
     id | email    | first_name | last_name | password 
    ------|----------------------|-------------|--------------|------------- 
     1 | [email protected] | Name  |  Surname | passwordhere 
    ------------------------------------------------------------------------ 

我試着什麼要做的是使用數據網格來顯示預訂表中的信息,使其可編輯,以便用戶可以編輯他的寵物的預訂。初始嘗試使用自動sql語句正常工作,SELECT * from [bookings]返回預訂表,我可以刪除和更新行。 我決定使用新的選擇查詢,以便用戶可以清楚地看到他的寵物名稱和他的名字,而不是數字。我用偉大的工程下面選擇查詢:

select start_date, end_date, usr.first_name AS 'Owner', pets.name AS 'Pet name' from 
    bookings AS bookings left join users AS usr ON bookings.user_id=usr.id left join 
    pets AS pets ON pets.id=bookings.pet_id 

    Output  
     ---------------------------------------------------------- 
      start_date | end_date | Owner  | Pet name | 
     ---------------|-------------|-------------|-------------| 
      01/04/2011 | 01/04/2011 | Name  | samplename | 
     ---------------------------------------------------------- 

現在,這裏是問題:從時間我更新我的GridView中選擇查詢所提到的人,沒有DELETE和UPDATE語句工作。當然,我會提供自定義的,但無論我嘗試什麼,總會返回一個錯誤incorrect syntax near nvarchar。 我也不確定,如果pet_id列是一個整數或應該是一個字符串,因爲它顯示在新的聯接選擇而不是它的ID的寵物的名稱?

我不知道我在做什麼錯在這裏。我感謝任何幫助。下面的GridView控件的代碼:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"> 
     <Columns> 
      <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> 
      <asp:BoundField DataField="start_date" HeaderText="start_date" SortExpression="start_date" /> 
      <asp:BoundField DataField="end_date" HeaderText="end_date" SortExpression="end_date" /> 
      <asp:BoundField DataField="Owner" HeaderText="Owner" SortExpression="Owner" /> 
      <asp:BoundField DataField="Pet name" HeaderText="Pet name" SortExpression="Pet name" /> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:pph_database %>" SelectCommand="select start_date, end_date, usr.first_name AS 'Owner', pets.name AS 'Pet name' from bookings AS bookings left join users AS usr ON bookings.user_id=usr.id left join pets AS pets ON pets.id=bookings.pet_id" UpdateCommand="UPDATE [bookings] SET [start_date] = @start_date, [end_date] = @end_date, [user_id] = @user_id, [pet_id] = @pet_id WHERE [id] = @id" DeleteCommand="DELETE FROM [bookings] WHERE [id] = @id" InsertCommand="INSERT INTO [bookings] ([start_date], [end_date], [user_id], [pet_id]) VALUES (@start_date, @end_date, @user_id, @pet_id)"> 
     <DeleteParameters> 
      <asp:Parameter Name="id" Type="Int32" /> 
     </DeleteParameters> 
     <InsertParameters> 
      <asp:Parameter DbType="Date" Name="start_date" /> 
      <asp:Parameter DbType="Date" Name="end_date" /> 
      <asp:Parameter Name="user_id" Type="Int32" /> 
      <asp:Parameter Name="pet_id" Type="Int32" /> 
     </InsertParameters> 
     <UpdateParameters> 
      <asp:Parameter DbType="Date" Name="start_date" /> 
      <asp:Parameter DbType="Date" Name="end_date" /> 
      <asp:Parameter Name="user_id" Type="Int32" /> 
      <asp:Parameter Name="pet_id" Type="Int32" /> 
      <asp:Parameter Name="id" Type="Int32" /> 
     </UpdateParameters> 
    </asp:SqlDataSource> 
+0

哪裏有OnRowDeleting,OnRowEditing,OnRow更新GridView中的事件? –

+0

我想他們根本就沒有,我所擁有的一切都已經在上面發佈了。 interresting的事情是,查詢工作原始設置,但如果我使用連接進行選擇,即使是最簡單的UPDATE語句 –

回答

1

也許你會做這樣的:

<asp:GridView ID="GridView1" runat="server" DataMember="Table" 
    EnableModelValidation="True" CssClass = "GridViewStyle" 
    OnRowDeleting = "dataViewRowDeleting" AutoGenerateDeleteButton="True" 
    OnRowEditing = "dataViewRowEditing" AutoGenerateEditButton="True" 
    OnRowUpdating = "dataViewRowUpdating"> 
    <Columns> 
    ... 
    </Columns>   
</asp:GridView> 

可以關聯事件與行刪除和dataViewRowEditing具有行編輯dataViewRowDeleting。