下部のソリューション。
レコードを更新しようとすると、次のエラーが発生します。
スカラー変数@PaymentTermIDを宣言する必要があります
問題は、@PaymentTermID
Updateパラメータですでに定義されている必要があるということです。との2つの関数は、DropDownList: GridViewRow.DataItemプロパティonrowdatabound
用にonrowupdate
ここにある関数の微調整バージョンです。削除は正常に機能します。
新しい行は追加されず、名前が変更されただけです。助けていただければ幸いです。私はaspオブジェクトの操作に正確に慣れていません。
<asp:GridView ID="GridView1" onrowdatabound="GridView1_RowDataBound" onrowupdating="GridView1_RowUpdating" runat="server" AutoGenerateColumns="False" DataKeyNames="PaymentTermID" DataSourceID="SqlDataSource1" CellPadding="1" CellSpacing="2">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:TemplateField HeaderText="Key Contract Date" SortExpression="Key Contract Date">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" DataTextField="Key_Contract_Date" DataValueField="Key_Contract_Date" />
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:Production_DatabaseConnectionString %>"
SelectCommand="SELECT DISTINCT [Key Contract Date] AS Key_Contract_Date FROM [tblPRJ_PaymentTerms]" />
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("[Key Contract Date]") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Due Date" HeaderText="Due Date" SortExpression="Due Date" />
<asp:BoundField DataField="Percent Due" HeaderText="Percent Due" SortExpression="Percent Due" />
<asp:BoundField DataField="Custom Description" HeaderText="Custom Description" SortExpression="Custom Description" />
</Columns>
<HeaderStyle Font-Bold="True" ForeColor="#666666" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Production_DatabaseConnectionString %>"
SelectCommand="SELECT * FROM [tblPRJ_PaymentTerms] WHERE ([Job Number] = @Job_Number)"
DeleteCommand="DELETE FROM [tblPRJ_PaymentTerms] WHERE [PaymentTermID] = @PaymentTermID"
InsertCommand="INSERT INTO [tblPRJ_PaymentTerms] ([Job Number], [Key Contract Date], [Due Date], [Percent Due], [Custom Description]) VALUES (@Job_Number, @Key_Contract_Date, @Due_Date, @Percent_Due, @Custom_Description)"
UpdateCommand="UPDATE [tblPRJ_PaymentTerms] SET [Job Number] = @Job_Number, [Key Contract Date] = @Key_Contract_Date, [Due Date] = @Due_Date, [Percent Due] = @Percent_Due, [Custom Description] = @Custom_Description WHERE [PaymentTermID] = @PaymentTermID">
<DeleteParameters>
<asp:Parameter Name="PaymentTermID" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="Job_Number" Type="String" />
<asp:Parameter Name="Key_Contract_Date" Type="String" />
<asp:Parameter Name="Due_Date" Type="DateTime" />
<asp:Parameter Name="Percent_Due" Type="Decimal" />
<asp:Parameter Name="Custom_Description" Type="String" />
</InsertParameters>
<SelectParameters>
<asp:ControlParameter ControlID="txtCurrentJobNumber" Name="Job_Number" PropertyName="Text" Type="String" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="Job_Number" Type="String" />
<asp:Parameter Name="Key_Contract_Date" Type="String" />
<asp:Parameter Name="Due_Date" Type="DateTime" />
<asp:Parameter Name="Percent_Due" Type="Decimal" />
<asp:Parameter Name="Custom_Description" Type="String" />
<asp:Parameter Name="PaymentTermID" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
解決策:ここで複数の問題が発生しました。何よりもまず、GuthMDは、バウンドフィールド、テンプレートフィールド、またはその他のソース(コントロールパラメーターの場合はコントロールなど)のいずれかに関して参照が必要なパラメーターの評価において正しかった。asp:boundfield
PaymentTermIDのを作成し、Visible
プロパティをfalseに設定するだけで、私が投稿した問題が修正されました。
もう1つの問題は、データベースのセットアップが不十分で、列名にスペースが含まれていることでした。OLEDBドライバーはそれを嫌い、データベースに書き戻そうとしたときに列名にスペースがある場合(角かっこ[]で囲まれている場合でも)にエラーが発生します。SQLで名前を修正し、コードを再検討して、ほとんどのSQLコードを書き直した後、期待どおりに動作し始めました。
よろしくお願いします。