2014-02-20 3 views
1

Есть несколько проблем с этим. прямо сейчас, все, что я пытаюсь сделать, это заставить команду delete работать. Редактировать тоже не работает, и угадание проблемы аналогично. Это учебный проект для меня. Любая помощь приветствуется. Спасибо.Проблемы с Gridview ASP.NET SqlDataSource

<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 

Спасибо заранее.

ответ

3

Предложение 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" /> 
+0

Это, похоже, не пошло. Ошибка, которую я получаю: «Процедура или функция« sproc_del_MenuItem »ожидает параметр« @MenuID », который не был указан». – user2891487

+0

Проверьте мое обновление. Добавить свойство DataKeyNames в GridView –

1

вам пользовательский автогенерированный столбец установлен как ложный, и вы также используете

<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 назад. надеюсь, что это работает

Смежные вопросы