2017-03-21 17 views
0

直接SQLクエリではなくオブジェクトのリストにバインドされたGridViewを使用しています。これが動作している場合の人口は更新されています。私は手動でこのgridviewのための挿入を生成しており、これも同様に動作しています。 gridviewからdeleteコマンドを実行しようとすると、正しいメソッドが呼び出されていますが、パラメータが入力されていません。これに必要な唯一のパラメータは@IDですが、他の投稿を読むと、一般的な修正はすべてのパラメータを追加することですが、それでも役に立たなくなります。メソッドを呼び出すオブジェクトにバインドされたGridViewからの削除

 <asp:GridView ID="GridViewBands" runat="server" AutoGenerateColumns="False" DataSourceID="BandsDataSource" CellPadding="4" ForeColor="#333333" GridLines="None" ShowFooter="True" Width="1375px"> 
      <AlternatingRowStyle BackColor="White" /> 
      <Columns> 
       <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> 
       <asp:TemplateField HeaderText="AgencyID" SortExpression="AgencyID"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox1" runat="server" Width="80px" Text='<%# Bind("AgencyID") %>' ReadOnly ="true"></asp:TextBox> 
         <asp:RequiredFieldValidator ControlToValidate="TextBox1" runat="server" ErrorMessage="there is an error?" Text="*`"></asp:RequiredFieldValidator> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:Button ID="Button1" runat="server" CommandName="Insert" Text="Add New Line" /> 
         <asp:TextBox ID="newAgencyID" runat="server" Width="80px"></asp:TextBox> 
         <br /> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label1" runat="server" Text='<%# Bind("AgencyID") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="TypeID" SortExpression="TypeID"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox2" runat="server" Width="80px" Text='<%# Bind("TypeID") %>' ReadOnly ="true"></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newTypeID" runat="server" Width="80px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label2" runat="server" Width="80px" Text='<%# Bind("TypeID") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="CompanyID" SortExpression="CompanyID"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox3" runat="server" Width="80px" Text='<%# Bind("CompanyID") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newCompanyID" runat="server" Width="80px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label3" runat="server" Text='<%# Bind("CompanyID") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Office" SortExpression="Office"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox4" runat="server" Width="80px" Text='<%# Bind("Office") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newOffice" runat="server" Width="80px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label4" runat="server" Text='<%# Bind("Office") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="SequenceID" SortExpression="SequenceID" > 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox5" runat="server" Width="80px" Text='<%# Bind("SequenceID") %>' ReadOnly ="true"></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newSequenceID" runat="server" Width="80px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label5" runat="server" Text='<%# Bind("SequenceID") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Minimmum" SortExpression="Minimmum"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox6" runat="server" Width="80px" Text='<%# Bind("Minimmum") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newMinimum" runat="server" Width="80px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label6" runat="server" Text='<%# Bind("Minimmum") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Capped" SortExpression="Capped"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox7" runat="server" Width="80px" Text='<%# Bind("Capped") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newCapped" runat="server" Width="80px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label7" runat="server" Text='<%# Bind("Capped") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="fixed" SortExpression="fixed"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox8" runat="server" Width="80px" Text='<%# Bind("fixed") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newFixed" runat="server" Width="80px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label8" runat="server" Text='<%# Bind("fixed") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Flat" SortExpression="Flat"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox9" runat="server" Width="80px" Text='<%# Bind("Flat") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newFlat" runat="server" Width="80px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label9" runat="server" Text='<%# Bind("Flat") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="SequenceLimit" SortExpression="SequenceLimit"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox10" runat="server" Width="80px" Text='<%# Bind("SequenceLimit") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newSequenceLimit" runat="server" Width="80px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label10" runat="server" Text='<%# Bind("SequenceLimit") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Rate" SortExpression="Rate"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox11" runat="server" Width="80px" Text='<%# Bind("Rate") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newRate" runat="server" Width="80px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label11" runat="server" Text='<%# Bind("Rate") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="ActiveFrom" SortExpression="ActiveFrom"> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtActiveFrom" runat="server" Width="200px" Text='<%# Bind("ActiveFrom") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newActiveFrom" runat="server" Width="200px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="lblActiveFrom" runat="server" Text='<%# Bind("ActiveFrom") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="ActiveTo" SortExpression="ActiveTo"> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtActiveTo" runat="server" Width="200px" Text='<%# Bind("ActiveTo") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="newActiveTo" runat="server" Width="200px"></asp:TextBox> 
        </FooterTemplate> 
        <ItemTemplate> 
         <asp:Label ID="lblActiveTo" runat="server" Text='<%# Bind("ActiveTo") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="ID" SortExpression="ID"> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtID" runat="server" Width="80px" Text='<%# Bind("ID") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="lblID" runat="server" Text='<%# Bind("ID") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 

      <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> 
      <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> 
      <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /> 
      <RowStyle BackColor="#FFFBD6" ForeColor="#333333" /> 
      <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /> 
      <SortedAscendingCellStyle BackColor="#FDF5AC" /> 
      <SortedAscendingHeaderStyle BackColor="#4D0000" /> 
      <SortedDescendingCellStyle BackColor="#FCF6C0" /> 
      <SortedDescendingHeaderStyle BackColor="#820000" /> 

     </asp:GridView> 

データソースは次のとおりですが、他の作業方法もあります。これは、いずれのパラメータにも値を設定しないdeleteメソッドです。

 <asp:ObjectDataSource ID="BandsDataSource" runat="server" SelectMethod="SelectBands" TypeName="App_Code.Billing+BillingBand" UpdateMethod="UpdateBands" DeleteMethod="RemoveBand" InsertMethod="AddNewBand"> 
      <SelectParameters> 
       <asp:Parameter Name ="AgencyID" Type ="Int64" /> 
      </SelectParameters> 
      <DeleteParameters> 
       <asp:Parameter Name="AgencyID" Type="Object" /> 
       <asp:Parameter Name="TypeID" Type="Object" /> 
       <asp:Parameter Name="CompanyID" Type="Object" /> 
       <asp:Parameter Name="Office" Type="Object" /> 
       <asp:Parameter Name="SequenceID" Type="Object" /> 
       <asp:Parameter Name="Minimmum" Type="Object" /> 
       <asp:Parameter Name="Capped" Type="Object" /> 
       <asp:Parameter Name="fixed" Type="Object" /> 
       <asp:Parameter Name="Flat" Type="Object" /> 
       <asp:Parameter Name="SequenceLimit" Type="Object" /> 
       <asp:Parameter Name="Rate" Type="Object" /> 
       <asp:Parameter Name="ActiveFrom" Type="Object" /> 
       <asp:Parameter Name="ActiveTo" Type="Object" /> 
       <asp:Parameter Name="ID" Type="Object" /> 
      </DeleteParameters> 
      <InsertParameters> 
       <asp:Parameter Name="AgencyID" Type="Object" /> 
       <asp:Parameter Name="TypeID" Type="Object" /> 
       <asp:Parameter Name="CompanyID" Type="Object" /> 
       <asp:Parameter Name="Office" Type="Object" /> 
       <asp:Parameter Name="SequenceID" Type="Object" /> 
       <asp:Parameter Name="Minimmum" Type="Object" /> 
       <asp:Parameter Name="Capped" Type="Object" /> 
       <asp:Parameter Name="fixed" Type="Object" /> 
       <asp:Parameter Name="Flat" Type="Object" /> 
       <asp:Parameter Name="SequenceLimit" Type="Object" /> 
       <asp:Parameter Name="Rate" Type="Object" /> 
       <asp:Parameter Name="ActiveFrom" Type="Object" /> 
       <asp:Parameter Name="ActiveTo" Type="Object" /> 
       <asp:Parameter Name="ID" Type="Object" /> 
      </InsertParameters> 
      <UpdateParameters> 
       <asp:Parameter Name="AgencyID" Type="Object"/> 
       <asp:Parameter Name="TypeID" Type="Object" /> 
       <asp:Parameter Name="CompanyID" Type="Object" /> 
       <asp:Parameter Name="Office" Type="Object" /> 
       <asp:Parameter Name="SequenceID" Type="Object" /> 
       <asp:Parameter Name="Minimmum" Type="Object" /> 
       <asp:Parameter Name="Capped" Type="Object" /> 
       <asp:Parameter Name="fixed" Type="Object" /> 
       <asp:Parameter Name="Flat" Type="Object" /> 
       <asp:Parameter Name="SequenceLimit" Type="Object" /> 
       <asp:Parameter Name="Rate" Type="Object" /> 
       <asp:Parameter Name="ActiveFrom" Type="Object" /> 
       <asp:Parameter Name="ActiveTo" Type="Object" /> 
       <asp:Parameter Name="ID" Type="Object" /> 
      </UpdateParameters> 
     </asp:ObjectDataSource> 

私は、しかし、私は削除のための「選択」行に基づいてパラメータを移入する方法を見つけることができていない、手動で以下に類似している使用してパラメータを設定するために試してみました。

Protected Sub BandsDataSource_Deleting(sender As Object, e As ObjectDataSourceMethodEventArgs) Handles BandsDataSource.Deleting 
    e.InputParameters("ID") = GridViewBands.SelectedRow.ID.ToString() 
End Sub 

しかし、これはNULL参照例外を返しています。

これは削除メソッドです。たとえば、updateメソッドとaddメソッドは同じ形式であり、正しく動作しています。

 Public Sub RemoveBand(AgencyID, TypeID, CompanyID, Office, SequenceID, Minimmum, Capped, fixed, Flat, SequenceLimit, Rate, ActiveFrom, ActiveTo, ID) 
      Using lCon As SqlConnection = Database.DBConnection 
       Dim lSqlText As String = "update billing_bands set active_to = getdate() where id = @id" 
       Dim lSqlCmd As New SqlCommand(lSqlText, lCon) 
       With lSqlCmd.Parameters 
        .AddWithValue("@id", ID) 
       End With 
       lSqlCmd.ExecuteNonQuery() 
      End Using 
     End Sub 

答えて

0

は、GridViewコントロールに削除するために使用される変数のデフォルト値を設定する必要がありonRowDeletingのPARAMを追加する必要がありました。

<asp:GridView ID="GridViewBands" runat="server" AutoGenerateColumns="False" DataSourceID="BandsDataSource" OnRowDeleting="test" CellPadding="4" ForeColor="#333333" GridLines="None" ShowFooter="True" Width="1375px"> 
      <AlternatingRowStyle BackColor="White" /> 
      <Columns> 

Protected Sub test(sender As Object, e As GridViewDeleteEventArgs) 
    Dim thisID As Integer = e.Values(13) 
    BandsDataSource.DeleteParameters("ID").DefaultValue = thisID 
    BandsDataSource.Delete() 
    BandsDataSource.DataBind() 
    BandsDataSource.Dispose() 
End Sub 
関連する問題