【问题标题】:ASP.NET SqlDataSource Gridview ProblemsASP.NET SqlDataSource Gridview 问题
【发布时间】:2014-02-20 18:53:18
【问题描述】:

这有一些问题。现在,我要做的就是让删除命令工作。编辑也不起作用,猜测问题是相似的。这是我自己的一个学习项目。任何帮助是极大的赞赏。谢谢。

 <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="Both" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" >
    <AlternatingRowStyle BackColor="White" />
    <EditRowStyle BackColor="#7C6F57" />

    <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#E3EAEB" />
    <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
    <SortedAscendingCellStyle BackColor="#F8FAFA" />
    <SortedAscendingHeaderStyle BackColor="#246B61" />
    <SortedDescendingCellStyle BackColor="#D4DFE1" />
    <SortedDescendingHeaderStyle BackColor="#15524A" />
    <Columns>

      <asp:BoundField DataField="MenuID" HeaderText="ID" Visible="true" ReadOnly="true" />

      <asp:TemplateField HeaderText="Date">
        <EditItemTemplate>
          <asp:TextBox ID="txtGridDate" runat="server" Text='<%# Bind("Date", "{0:M/dd/yyyy}")%>' Width="75px"></asp:TextBox>
        </EditItemTemplate>
        <ItemTemplate>
          <asp:Label ID="lblGridDate" runat="server" Text='<%# Bind("Date", "{0:M/dd/yyyy}") %>'></asp:Label>
        </ItemTemplate>
      </asp:TemplateField>

      <asp:TemplateField HeaderText="Description">
        <EditItemTemplate>
          <asp:TextBox ID="txtGridDescription" runat="server" Text='<%# Bind("Description") %>' Width="600px"></asp:TextBox>
        </EditItemTemplate>
        <ItemTemplate>
          <asp:Label ID="lblGridDescription" runat="server" Text='<%# Bind("Description") %>'></asp:Label>
        </ItemTemplate>
      </asp:TemplateField>

      <asp:TemplateField HeaderText="MealType">
        <EditItemTemplate>
          <asp:DropDownList ID="ddlGridMealType" runat="server">
            <asp:ListItem Value="1" Text="Breakfast"></asp:ListItem>
            <asp:ListItem Value="2" Text="Dinner"></asp:ListItem>
          </asp:DropDownList>
        </EditItemTemplate>
        <ItemTemplate>
          <asp:Label ID="lblGridType" runat="server" Text='<%# Bind("MealType") %>'></asp:Label>
        </ItemTemplate>         
      </asp:TemplateField>

      <asp:CommandField ButtonType="Button" ShowEditButton="true" ValidationGroup="edit" />     
      <asp:CommandField ButtonType="Button" ShowDeleteButton="true" />
    </Columns>        
  </asp:GridView>
  <asp:SqlDataSource 
    ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:CampRandolphConnectionString %>" 
    SelectCommand="sproc_sel_AllMeals" SelectCommandType="StoredProcedure" 
    InsertCommand="sproc_ins_Meal" InsertCommandType="StoredProcedure"
    UpdateCommand="sproc_edit_Meal" UpdateCommandType="StoredProcedure" 
    DeleteCommand="sproc_del_MenuItem" DeleteCommandType="StoredProcedure" >
    <InsertParameters>
      <asp:Parameter DbType="Date" Name="Date" />
      <asp:Parameter Name="Description" Type="String" />
      <asp:Parameter Name="MealCategoryID" Type="Int32" />
    </InsertParameters>
    <UpdateParameters>
      <asp:Parameter Name="MenuID" Type="Int32" />
      <asp:Parameter DbType="Date" Name="Date" />
      <asp:Parameter Name="Description" Type="String" />
      <asp:Parameter Name="MealCategoryID" Type="Int32" />
    </UpdateParameters>
    <DeleteParameters>
      <asp:Parameter Name="MenuID" Type="Int32" />
    </DeleteParameters>
  </asp:SqlDataSource>

这里是存储过程:

ALTER PROCEDURE [dbo].[sproc_del_MenuItem]
@MenuID int
AS
BEGIN
DELETE FROM CampRandolph.dbo.Menu
WHERE @MenuID = MenuID
END

提前致谢。

【问题讨论】:

    标签: c# asp.net gridview sqldatasource


    【解决方案1】:

    您的 Where 子句在您的存储过程中是错误的。应该是:

    ALTER PROCEDURE [dbo].[sproc_del_MenuItem]
    @MenuID int
    AS
    BEGIN
    DELETE FROM CampRandolph.dbo.Menu
    WHERE MenuID = @MenuID
    END
    

    在您定义的 GridView 中添加 DataKeyNames 属性:

    <asp:GridView ID="GridView1" runat="server" DataKeyNames="MenuID" ....
    

    我还读到 HeaderText 需要与键名相同:

     <asp:BoundField DataField="MenuID" HeaderText="MenuID" Visible="true" ReadOnly="true" />
    

    【讨论】:

    • 这似乎没有做到。我收到的错误是:“过程或函数'sproc_del_MenuItem'需要参数'@MenuID',但未提供。”
    • 检查我的更新。将 DataKeyNames 属性添加到 GridView
    【解决方案2】:

    您是用户自动生成的列设置为 false,并且您也在使用

    <asp:BoundField DataField="MenuID" HeaderText="ID" Visible="true" ReadOnly="true" />
    

    你用这个代替:-

    <asp:TemplateField>
    <ItemTemplate>
    <asp:TextBox id="menuidtxt" runat="server" Text='<%# Eval("MenuID")%>'/>
    </ItemTemplate>
    </asp:TemplateField>
    

    现在将取回您的 menuid。 希望这有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      相关资源
      最近更新 更多