私は ASP.NET/C# の初心者ですが、できる限り自分の問題を説明するために最善を尽くします。
これで、SQL ソースがアタッチされたグリッドビューができました。正しい情報を掴みます。グリッドビューの情報は、グリッドの外側にあるドロップダウン リストで選択されているものに応じて変化します。これは機能します。問題は、更新と挿入にあります。
一度アップデートを試みます。(列の 1 つで [編集] をクリックするとすぐに) 次のエラー メッセージが表示されます。パラメータ名: 値
以下に示すように、列をテンプレートに分割して、管理しやすくしました。「ドロップダウン リスト 2」は編集テンプレートにあります。データソースに接続されています。これは、問題なく動作する最初のドロップダウン メニューとまったく同じソースです。したがって、それがその手順の背後にあるSQLになるとは思いません。ただし、このドロップダウンリスト 2 は Doctor にバインドされています。 今バインドするように言われたので、バインドの仕組みがわかりません
バインドを解除すると、少なくとも [編集] をクリックした後もグリッドを表示できますが、更新後に次のエラー メッセージが表示されます。
今、オンラインで解決策を探しましたが、バインディングについて頭を悩ませることはできません。必要に応じて、次のコードを示します。
ASP:
<asp:SqlDataSource ID="sdPatient" runat="server" ConnectionString="<%$ ConnectionStrings:MedicalOfficeConnectionString %>" DeleteCommand="usp_PatientDelete" InsertCommand="uspPatientInsert" SelectCommand="uspPatientSelectByIDOrSelectAll" UpdateCommand="uspPatientUpdate" SelectCommandType="StoredProcedure" DeleteCommandType="StoredProcedure" InsertCommandType="StoredProcedure" UpdateCommandType="StoredProcedure">
<DeleteParameters>
<asp:Parameter Name="ID" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="OHIP" Type="String" />
<asp:Parameter Name="FirstName" Type="String" />
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter DbType="Date" Name="DOB" />
<asp:Parameter Name="VisitsPerYear" Type="Int32" />
<asp:Parameter Name="DoctorID" Type="Int32" />
<asp:Parameter Name="Timestamp" Type="Byte"></asp:Parameter>
</InsertParameters>
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="DoctorID" PropertyName="SelectedValue" Type="Int32" DefaultValue="0" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="ID" Type="Int32" />
<asp:Parameter Name="OHIP" Type="String" />
<asp:Parameter Name="FirstName" Type="String" />
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter DbType="Date" Name="DOB" />
<asp:Parameter Name="VisitsPerYear" Type="Int32" />
<asp:Parameter Name="DoctorID" Type="Int32" />
<asp:Parameter Name="ID" Type="Int32" />
<asp:Parameter Name="Timestamp" Type="Byte"></asp:Parameter>
</UpdateParameters>
</asp:SqlDataSource>
<p>Select Patient By Doctor:<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="sdDoctorList" DataTextField="Doctor" DataValueField="ID" AppendDataBoundItems="True">
<asp:ListItem Value="0">All Doctors</asp:ListItem>
</asp:DropDownList>
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4" DataSourceID="sdPatient" GridLines="Horizontal">
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
<asp:TemplateField HeaderText="OHIP" SortExpression="OHIP">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("OHIP") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("OHIP") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="First Name" SortExpression="FirstName">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("FirstName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last Name" SortExpression="LastName">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("LastName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("LastName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="DOB" SortExpression="DOB">
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("DOB") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("DOB") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Visits Per Year" SortExpression="VisitsPerYear">
<EditItemTemplate>
<asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("VisitsPerYear") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("VisitsPerYear") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Doctor" SortExpression="Doctor">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="sdDoctorList" DataTextField="Doctor" DataValueField="ID" SelectedValue='<%# Bind("Doctor") %>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label6" runat="server" Text='<%# Bind("Doctor") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="White" ForeColor="#333333" />
<HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="White" ForeColor="#333333" />
<SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F7F7F7" />
<SortedAscendingHeaderStyle BackColor="#487575" />
<SortedDescendingCellStyle BackColor="#E5E5E5" />
<SortedDescendingHeaderStyle BackColor="#275353" />
</asp:GridView>
手順:
これはドロップダウンリスト用です。これにより、名前と値が得られます。*注意: この手順は最初のドロップダウン リストで機能し、2 番目のドロップダウン リストでも機能すると思います。
ALTER PROCEDURE dbo.uspDoctorList
AS
BEGIN
SET NOCOUNT ON
SELECT ID, LastName +', ' + FirstName AS 'Doctor'
FROM Doctor
ORDER BY 'Doctor'
END
アップデート手順です。これに問題があるのか 、それとも私のASPだけなのかはわかりません
ALTER PROCEDURE dbo.uspPatientUpdate
@ID int,
@OHIP char(10),
@FirstName nvarchar(20),
@LastName nvarchar(40),
@DOB date,
@VisitsPerYear int,
@DoctorID int,
@Timestamp Timestamp
AS
BEGIN
SET NOCOUNT OFF
UPDATE Patient
SET OHIP = @OHIP,
FirstName = @FirstName,
LastName = @LastName,
DOB = @DOB,
VisitsPerYear = @VisitsPerYear,
DoctorID = @DoctorID
WHERE ID = @ID AND Timestamp = @Timestamp
END
どんな助けにも感謝します。ところで、これは私たちが教えられたものよりも少し進んでいます (ASP でストアド プロシージャを使用)。
さらに情報が必要な場合は、お問い合わせください