1

asp.netに比較的慣れていないので、GridViewに慣れていないので、次のタスクを実行するのに苦労しています。データベースに3つのテーブルがあります。

    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  |  test@test.gmail.com |   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のselectクエリを上記のクエリに更新してから、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>
4

1 に答える 1

1

Maybe you will do like this:

<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>

You can associate events dataViewRowDeleting with row deleting and dataViewRowEditing with row editing.

于 2012-11-21T19:29:37.017 に答える