【问题标题】:Adding a row in between of a gridview in asp.net deletes the last row在asp.net中的gridview之间添加一行会删除最后一行
【发布时间】:2016-11-25 04:49:13
【问题描述】:

当我向预填充的 GridView 动态添加新行时,我在 ASP.NET 的 gridview 中遇到问题

我的网格视图由从数据库中预填充的两种类型的元素(比如 A 和 B)组成

我编写的代码首先计算类型 A 的元素计数,然后在 A 行和 B 行的元素之间添加一个新行作为“行分隔符”。 我在网格视图的行数据绑定事件中写了这段逻辑

我的网格视图包含 A 类和 B 类元素的复选框。

现在,如果我检查网格视图中的 last element ,我在放置一个断点后意识到给定元素不再存在于 gridView 中,尽管它在用户的前端视觉上显示“检查”

我相信这与我添加到 gridView 的动态行分隔符有关,但我似乎不明白为什么。

下面是我的代码。

    //Page Load
    protected void Page_Load(object sender, EventArgs e)
    {
        //Getting count of elements of type A and storing it in a global variable
        globalA_count= GetCount(dataset);
        gridView.DataBind();
    }
    // GRIDVIEW DATABOUND

    protected void gvAccessories_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //DATA SET IS ALREADY SORTED SO THAT "A" ELEMNTS AND 'B" ELEMENTS ARE GROUPED TOGETHERE
    if (e.Row.Cells[4].Text == "B")
    {
        e.Row.BackColor = System.Drawing.Color.FromArgb(236, 236, 236);
    }
    /*** "localA_Count" is used as a counter to count "A" elements within   rowdatabound
       * globalA_count" holds the count of "A" elements already calculated
       *  when "localA_Count" equals "globalA_count",it means all 
        A type elements are already traversed**/
     else if (e.Row.Cells[4].Text == "A")
     {
         localA_Count++;
         if (localA_Count== globalA_count)
         {
             // ADD ROW SEPERATOR
             GridViewRow row = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert);   
             row.CssClass = "StdGridHeader";
             TableCell cell1 = new TableCell();
             cell1.Text = "sample text"
             cell1.HorizontalAlign = HorizontalAlign.Center;
             cell1.ColumnSpan = 4;
             row.Cells.Add(cell1);
             ((GridView)sender).Controls[0].Controls.AddAt(globalA_count+ 1, row);
          }
    }

}

【问题讨论】:

  • 您是否错过了一些代码部分,因为有些条件没有任何方法是不可能的。 @Ananth
  • 有一个名为 GetCount 的函数,我在其中确定类型 "A" 元素的总数,我只留下了那个。但我不确定这是否会有所帮助。
  • @NayanKatkani 编辑了代码。我将前面的代码包含在 rowdatabound 函数中。
  • 代码似乎没有问题,你能用更多细节澄清发生了什么吗?
  • @JuniorJohn 视觉上一切正常。但是在点击“继续”按钮的回帖中,gridview 计数被搞砸了。在添加“分隔符”之前,行数为 48 。但是在添加分隔符后,计数应该是 49,而不是它仍然显示 48,并且“第 n 行”或最后一行被删除。(查看断点详细信息时)

标签: c# asp.net gridview


【解决方案1】:

您是否正在添加代码以纠正事件?您的 gridview id 是 "gridview" 但事件不同 gvAccessories_RowDataBound() ?

【讨论】:

  • 实际上我在粘贴之前编辑了代码的命名法“gridview”相当于“gvAccessories”
猜你喜欢
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多