如何在Gridview中生成动态文本框和dopdownlist时删除行 [英] How to delete row when generating dynamically textboxes and dopdownlist in Gridview

查看:90
本文介绍了如何在Gridview中生成动态文本框和dopdownlist时删除行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,

我通过维护视图状态并将其绑定在gridview中来生成动态文本框和下拉列表。

当我使用LinkBut​​ton Delete删除gridview中的任何行时,删除该行,它删除了它下面的行。这是代码:

  protected   void  LinkBut​​ton1_Click( object  sender,EventArgs e)
{

LinkBut​​ton lb =(LinkBut​​ton)sender;
GridViewRow gvRow =(GridViewRow)lb.NamingContainer;
int rowID = gvRow.RowIndex + 1 ;
if (ViewState [ CurrentTable]!= null
{
DataTable dt =(DataTable)ViewState [ CurrentTable];
if (dt.Rows.Count > 1
{
if (gvRow.RowIndex < dt.Rows.Count - 1
{
// 删除选定的行数据
dt.Rows.Remove(dt.Rows [rowID]);
}
}
// 将当前数据存储在ViewState中以供将来参考
ViewState [ CurrentTable] = dt;
// 重新绑定GridView以获取更新的数据
Gridview1.DataSource = DT;
Gridview1.DataBind();
}


SetPreviousData();
}


私有 void SetPreviousData()
{

int rowIndex = 0 ;
if (ViewState [ CurrentTable]!= null
{
DataTable dt =(DataTable)ViewState [ CurrentTable];

if (dt.Rows.Count > 0
{
for int i = 0 ; i < dt.Rows.Count; i ++)
{

DropDownList box1 =(DropDownList)Gridview1.Rows [rowIndex] .Cells [ 1 ]。FindControl( DROPDOWNLIST1);
box1.DataSource = getitemoutput.DtCategory;
box1.DataTextField = item_name;
box1.DataValueField = store_item_id;
box1.DataBind();
box1.Items.Insert( 0 选择商店);
TextBox box2 =(TextBox)Gridview1.Rows [rowIndex] .Cells [ 2 ]。FindControl( TextBox2);
TextBox box3 =(TextBox)Gridview1.Rows [rowIndex] .Cells [ 3 ]。FindControl( TextBox3);
TextBox box4 =(TextBox)Gridview1.Rows [rowIndex] .Cells [ 4 ]。FindControl( TextBox4);
TextBox box5 =(TextBox)Gridview1.Rows [rowIndex] .Cells [ 4 ]。FindControl( TextBox5);

box1.Text = dt.Rows [i] [ Column1 ]的ToString();
box2.Text = dt.Rows [i] [ Column2]。ToString( );
box3.Text = dt.Rows [i] [ Column3]。ToString( );
box4.Text = dt.Rows [i] [ Column4]。ToString( );
box5.Text = dt.Rows [i] [ Column5]。ToString( );

rowIndex ++;
}
}
}

}

解决方案

< blockquote>从您尝试实施此代码的位置查看此文章:从ASP.NET GridView动态添加和删除行 [ ^ ]



验证它为什么不适合你。


Hello,
I am generating dynamic textboxes and dropdownlist by maintaining the viewstate and bind it in gridview.
When I delete any row from gridview using LinkButton Delete, instead of deleting that row, it deleted the row below it.Here is the code:

protected void LinkButton1_Click(object sender, EventArgs e)
  {

          LinkButton lb = (LinkButton)sender;
          GridViewRow gvRow = (GridViewRow)lb.NamingContainer;
          int rowID = gvRow.RowIndex + 1;
          if (ViewState["CurrentTable"] != null)
          {
              DataTable dt = (DataTable)ViewState["CurrentTable"];
              if (dt.Rows.Count > 1)
              {
                  if (gvRow.RowIndex < dt.Rows.Count - 1)
                  {
                      //Remove the Selected Row data
                      dt.Rows.Remove(dt.Rows[rowID]);
                  }
              }
              //Store the current data in ViewState for future reference
              ViewState["CurrentTable"] = dt;
              //Re bind the GridView for the updated data
              Gridview1.DataSource = dt;
              Gridview1.DataBind();
          }


          SetPreviousData();
      }


private void SetPreviousData()
  {

          int rowIndex = 0;
          if (ViewState["CurrentTable"] != null)
          {
              DataTable dt = (DataTable)ViewState["CurrentTable"];

              if (dt.Rows.Count > 0)
              {
                  for (int i = 0; i < dt.Rows.Count; i++)
                  {

                      DropDownList box1 = (DropDownList)Gridview1.Rows[rowIndex].Cells[1].FindControl("DROPDOWNLIST1");
                      box1.DataSource = getitemoutput.DtCategory;
                      box1.DataTextField = "item_name";
                      box1.DataValueField = "store_item_id";
                      box1.DataBind();
                      box1.Items.Insert(0, "Select store");
                      TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
                      TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");
                      TextBox box4 = (TextBox)Gridview1.Rows[rowIndex].Cells[4].FindControl("TextBox4");
                      TextBox box5 = (TextBox)Gridview1.Rows[rowIndex].Cells[4].FindControl("TextBox5");

                      box1.Text = dt.Rows[i]["Column1"].ToString();
                      box2.Text = dt.Rows[i]["Column2"].ToString();
                      box3.Text = dt.Rows[i]["Column3"].ToString();
                      box4.Text = dt.Rows[i]["Column4"].ToString();
                      box5.Text = dt.Rows[i]["Column5"].ToString();

                      rowIndex++;
                  }
              }
          }

  }

解决方案

Check this Article from where you tried to implement this code : Dynamically adding and deleting rows from ASP.NET GridView[^]

Verify why it doesn't work for you.


这篇关于如何在Gridview中生成动态文本框和dopdownlist时删除行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆