2015-03-27 4 views
0

Я работаю с .NET Webforms в C#, и сейчас я пытаюсь добавить и вычесть строку в gridview при нажатии кнопки. У меня есть кнопка добавления и удаления в шаблоне нижнего колонтитула, и у меня есть кнопка добавления, работающая в порядке, но удаление последней строки, при сохранении любых данных, которые могли быть введены в других, я столкнулся с проблемой. В основном я могу удалить последнюю строку, но я заполняю несколько строк данных перед рукой, и все они стираются, когда я удаляю последнюю строку. Я хочу сохранить все введенные данные и просто вычесть индекс последней строки из gridview. вот мой GridView:Сохранять значения при вычитании строк сетки?

<!-- ADD COURSE GRIDVIEW --> 
<asp:GridView ID="Course_Gridview" runat="server" ShowFooter="True" AutoGenerateColumns="false" class="table table-striped" GridLines="None" Visible="false"> 
<Columns> 

    <asp:BoundField DataField="RowNumberCourse" HeaderText="Course #" /> 

    <asp:TemplateField HeaderText="Course"> 
     <ItemTemplate> 
      <asp:DropDownList ID="CourseList" runat="server" DataSourceID="CourseListODS" DataTextField="SubjectName" 
        DataValueField="CourseID" AppendDataBoundItems="true" CssClass="form-control course-ddl-fix"> 
       <asp:ListItem Value="0">---------[Select]---------</asp:ListItem> 
      </asp:DropDownList> 
     <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" 
     ErrorMessage="Please select a Program Length value from the list." Display="Dynamic" ControlToValidate="CourseList" 
     InitialValue="0" Text="*" CssClass="require-fix"></asp:RequiredFieldValidator> 

     </ItemTemplate> 
    </asp:TemplateField> 

    <asp:TemplateField HeaderText="Mark"> 
     <ItemTemplate> 
      <asp:TextBox ID="EnterMark" runat="server" CssClass="form-control pgm-length-fix"></asp:TextBox> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server" 
      ErrorMessage="Please enter a Mark when inserting a course." Text="*" ControlToValidate="EnterMark" 
      Display="Dynamic" CssClass="require-fix"></asp:RequiredFieldValidator> 

     </ItemTemplate> 

     <FooterStyle HorizontalAlign="Right" /> 
     <FooterTemplate> 
      <asp:Button ID="ButtonAdd" runat="server" Text="Add Another Course..." OnClick="ButtonAdd_Click" CssClass="listview-buttons" CausesValidation="False"/> 
      <asp:LinkButton ID="ButtonSubtract" runat="server" CssClass="btn btn-default btn-sm delete-fix" 
        OnClick="ButtonSubtract_Click" CausesValidation="false"> 
       <i aria-hidden="true" class="glyphicon glyphicon-remove"></i> Remove...</asp:LinkButton> 
     </FooterTemplate> 
    </asp:TemplateField> 

</Columns> 

А вот метод вычитания последней строки:

protected void ButtonSubtract_Click(object sender, EventArgs e) 
{ 
    if (ViewState["CurrentTableCourse"] != null) 
    { 
     //create new datatable, cast datatable of viewstate 
     DataTable dtCurrentTable = (DataTable)ViewState["CurrentTableCourse"]; 
     DataRow drCurrentRow = null; 

     int rowIndex = 0; 

     if (dtCurrentTable.Rows.Count > 1) 
     { 
      for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) 
      { 
       //extract the values 
       DropDownList courseList = (DropDownList)Course_Gridview.Rows[rowIndex].Cells[1].FindControl("CourseList"); 
       TextBox marks = (TextBox)Course_Gridview.Rows[rowIndex].Cells[2].FindControl("EnterMark"); 

       drCurrentRow = dtCurrentTable.NewRow(); 
       drCurrentRow["RowNumberCourse"] = i; 

       dtCurrentTable.Rows[i - 1]["Column1Course"] = courseList.Text; 
       dtCurrentTable.Rows[i - 1]["Column2Course"] = marks.Text; 

       rowIndex++; 
      } 

      dtCurrentTable.Rows[rowIndex - 1].Delete(); 

      ViewState["CurrentTableCourse"] = dtCurrentTable; 

      Course_Gridview.DataSource = dtCurrentTable; 
      Course_Gridview.DataBind(); 
     } 
    } 
} 

Как бы идти о сохранении всех значений введено, кроме последней который удаляется?

+0

Вы можете разместить свой добавить код GridView строки? –

ответ

0

спасибо, что ответил, но я только что получил его. Мне нужно добавить следующие методы для того, чтобы работать соответствующим образом:

private void SetPreviousCourseData() 
    { 
     int rowIndex = 0; 

     if (ViewState["CurrentTableCourse"] != null) 
     { 
      DataTable dt = (DataTable)ViewState["CurrentTableCourse"]; 
      if (dt.Rows.Count > 0) 
      { 
       for (int i = 0; i < dt.Rows.Count; i++) 
       { 
        DropDownList courseList = (DropDownList)Course_Gridview.Rows[rowIndex].Cells[1].FindControl("CourseList"); 
        TextBox marks = (TextBox)Course_Gridview.Rows[rowIndex].Cells[2].FindControl("EnterMark"); 

        courseList.Text = dt.Rows[i]["Column1Course"].ToString(); 
        marks.Text = dt.Rows[i]["Column2Course"].ToString(); 

        rowIndex++; 
       } 
      } 
     } 
    } 

Вызовите этот метод, если (Page.IsPostBack!):

private void SetInitialCourse() 
    { 
     //Create DataTable 
     DataTable dt = new DataTable(); 
     DataRow dr = null; 

     //Add initail values to DataTable 
     dt.Columns.Add(new DataColumn("RowNumberCourse", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column1Course", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column2Course", typeof(string))); 
     //dt.Columns.Add(new DataColumn("Column3", typeof(string))); 

     dr = dt.NewRow(); 
     dr["RowNumberCourse"] = 1; 
     dr["Column1Course"] = string.Empty; 
     dr["Column2Course"] = string.Empty; 
     //dr["Column3"] = string.Empty; 

     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 

     //Store the DataTable in ViewState 
     ViewState["CurrentTableCourse"] = dt; 
     Course_Gridview.DataSource = dt; 
     Course_Gridview.DataBind(); 

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