2014-01-22 3 views
1

У меня есть gridview, что я добавил ItemTemplate для отображения флажка для каждой строки. Я пытаюсь просто удалить строки, проверенные в коде за файлом. Моя проблема в том, что мой код позади не обнаруживает флажок. Это очень странно, потому что я чувствую, что ничего не изменил, но код больше не работает (он работал два дня назад, но локально сохранил эти изменения - не загружался в TFS).Удалить отмеченные строки из GridView

GridView (EDITED ВКЛЮЧИТЬ ОБЯЗАТЕЛЬНОЕ):

<%--Data Grid--%> 
<asp:GridView ID="Grid_Recipe" CssClass="gridMain" runat="server" OnSelectedIndexChanged="Grid_Recipe_SelectedIndexChanged" AutoGenerateColumns="False" DataKeyNames="Recipe_ID" DataSourceID="DataSource_Grid_Unfiltered" EnableViewState="True" AllowPaging="True" AllowSorting="True" BorderStyle="Solid" BorderWidth="1px" CellPadding="1" CellSpacing="1" HorizontalAlign="Center"> 

    <AlternatingRowStyle BackColor="#CCFFFF" /> 

    <Columns> 
     <asp:CommandField ShowSelectButton="True" SelectText="Edit" /> 
     <asp:TemplateField HeaderText="Select"> 
      <ItemTemplate> 
       <asp:CheckBox ID="deleteCheckbox" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="Recipe_ID" HeaderText="Recipe_ID" InsertVisible="False" ReadOnly="True" SortExpression="Recipe_ID" Visible="false" /> 
     <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
     <asp:BoundField DataField="Difficulty" HeaderText="Difficulty" SortExpression="Difficulty" /> 
     <asp:BoundField DataField="Meal" HeaderText="Meal" SortExpression="Meal" /> 
     <asp:BoundField DataField="Cook_Time" HeaderText="Cook Time" SortExpression="Cook_Time" /> 
     <asp:BoundField DataField="Directions" HeaderText="Directions" SortExpression="Directions" /> 
    </Columns> 
    <HeaderStyle BackColor="#0096D6" ForeColor="White" HorizontalAlign="Right" /> 
</asp:GridView> 

<%--Delete Button--%> 
<asp:Button runat="server" ID="deleteButton" Text="Delete Checked" OnClick="DeleteRows" /> 


<%--Data Sources--%> 
<asp:SqlDataSource ID="Meal_Filter" runat="server" ConnectionString="<%$ ConnectionStrings:LYNNAU_ConnectionString %>" SelectCommand="SELECT DISTINCT [Meal] FROM [Recipe]"></asp:SqlDataSource> 
<asp:SqlDataSource ID="DataSource_Grid_Unfiltered" runat="server" ConnectionString="<%$ ConnectionStrings:LYNNAU_ConnectionString %>" SelectCommand="SELECT * FROM [Recipe]" UpdateCommand="UPDATE [Recipe] SET [Name] = @Name, [Difficulty] = @Difficulty, [Meal] = @Meal, [Cook_Time] = @Cook_Time, [Directions] = @Directions WHERE [Recipe_ID] = @Recipe_ID"> 
    <DeleteParameters> 
     <asp:Parameter Name="Recipe_ID" Type="Int32" /> 
    </DeleteParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="Name" Type="String" /> 
     <asp:Parameter Name="Difficulty" Type="String" /> 
     <asp:Parameter Name="Meal" Type="String" /> 
     <asp:Parameter Name="Cook_Time" Type="Int32" /> 
     <asp:Parameter Name="Directions" Type="String" /> 
     <asp:Parameter Name="Recipe_ID" Type="Int32" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 
<asp:SqlDataSource ID="DataSource_Grid_Meal" runat="server" ConnectionString="<%$ ConnectionStrings:LYNNAU_ConnectionString %>" SelectCommand="SELECT * FROM [Recipe] WHERE ([Meal] = @Meal)" UpdateCommand="UPDATE [Recipe] SET [Name] = @Name, [Difficulty] = @Difficulty, [Meal] = @Meal, [Cook_Time] = @Cook_Time, [Directions] = @Directions WHERE [Recipe_ID] = @Recipe_ID"> 
    <DeleteParameters> 
     <asp:Parameter Name="Recipe_ID" Type="Int32" /> 
    </DeleteParameters> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="Meal_DDL" Name="Meal" PropertyName="SelectedValue" Type="String" /> 
    </SelectParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="Name" Type="String" /> 
     <asp:Parameter Name="Difficulty" Type="String" /> 
     <asp:Parameter Name="Meal" Type="String" /> 
     <asp:Parameter Name="Cook_Time" Type="Int32" /> 
     <asp:Parameter Name="Directions" Type="String" /> 
     <asp:Parameter Name="Recipe_ID" Type="Int32" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

Код За:

[WebMethod] 
protected void DeleteRows(object sender, EventArgs e) 
{ 
    dbCRUD delete = new dbCRUD(); 
    foreach(GridViewRow grd in Grid_Recipe.Rows) 
    { 
     if(grd.RowType == DataControlRowType.DataRow) 
     { 
      if((grd.FindControl("deleteCheckbox") as CheckBox).Checked) 
      { 
       string id = Grid_Recipe.DataKeys[grd.RowIndex].Value.ToString(); 
       //int intID = Convert.ToInt32(Grid_Recipe.SelectedDataKey.Value); 
       int intID = int.Parse(id); 
       if(delete.DeleteRecord(intID) == 1) 
       { 
        resultsDelete.Text = "SQL Exception"; 
        resultsDelete.Visible = true; 
        break; 
       } 
       else if(delete.DeleteRecord(intID) == 2) 
       { 
        resultsDelete.Text = "Non SQL Exception"; 
        resultsDelete.Visible = true; 
        break; 
       } 
       else 
       { 
        resultsDelete.Text = "Record(s) deleted"; 
        resultsDelete.Visible = true; 
       } 
      } 
     } 
    } 
} 

Все в моем коде, который будет препятствовать флажок от обнаружения? Я поставил точку останова на методе, и я добираюсь до того, где он проверяет проверку флажка, но после того, как он выполняет итерацию через каждую строку, никакие строки не обнаружены. Заранее спасибо!

+0

Так все галочки найдены, но и не проверяется, верно? В этом случае вы можете показать код привязки вида сетки, желательно весь обработчик событий страницы, где это происходит? – Andrei

+0

Просто добавил элементы управления исходным кодом. Я пытался привязать данные к сетке, если страница отправлена ​​обратно, потому что я думал, что db уже будет обновлен, но это может быть неправильно. –

ответ

1

Мне кажется, что серверная сторона ничего не знает о вашем GridView, потому что у вас есть EnableViewState="False" set.

Установите это на true и посмотрите, поможет ли оно. Если не проверить, как вы связываете GridView и убедитесь, что вы не перевязываете его снова до значения null в своем Page_Load или что-то перед запуском функции DeleteRows. Сообщение о том, как вы привязываетесь, это поможет диагностировать проблему.

Я также отправил в последнее время ответ на подобный вопрос, который вы можете найти здесь: iterate through gridview rows on button click

+0

Изменено EnableViewState на true, и это не повлияло. Я опубликовал элементы управления источниками данных в редактировании на мой оригинальный вопрос. –

+0

Я удалил привязку сетки PostBack и, похоже, исправил мою проблему. Я добавил привязку сетки после того, как запись была удалена, но в моем методе DeleteRows и которая работает правильно. На другой вопрос, но спасибо за помощь! –

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