简体   繁体   English

通过单击 asp.net 中的按钮在网格中添加多行

[英]add Multiple rows in grid by clicking on button in asp.net

I need to add 'n' number of rows with 'm' number of column in the Gridview dynamically(rows contains m number of textbox) through on click of button for ex.我需要通过单击按钮在 Gridview 中动态添加 'n' 行和 'm' 列数(行包含 m 个文本框)。 when a user click on button, A particular integer value is initialize to a variable, and the variable is the number of rows required.当用户点击按钮时,一个特定的整数值被初始化为一个变量,该变量是所需的行数。 Let say it's value is 8, so 8 rows containing m number of textbox has been created dynamically.`假设它的值为 8,因此动态创建了包含 m 个文本框的 8 行。`

Currently I go through this doc and implemented the same: link目前我浏览了这个文档并实现了相同的: 链接

for functionality of multiple rows i just added some constraint and comment some code which is not required as code below:对于多行的功能,我只是添加了一些约束并注释了一些不需要的代码,如下代码:

 private void SetInitialRow()
    {
        DataTable dt = new DataTable();
        DataRow dr = null;
        dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
        dt.Columns.Add(new DataColumn("Column1", typeof(string)));
        dt.Columns.Add(new DataColumn("Column2", typeof(string)));
        dt.Columns.Add(new DataColumn("Column3", typeof(string)));
        dr = dt.NewRow();
        dr["RowNumber"] = 1;
        dr["Column1"] = string.Empty;
        dr["Column2"] = string.Empty;
        dr["Column3"] = string.Empty;
        dt.Rows.Add(dr);

        //Store the DataTable in ViewState
        ViewState["CurrentTable"] = dt;

        Gridview1.DataSource = dt;
        Gridview1.DataBind();
    }
    private void AddNewRowToGrid()
    {
        try
        {
            int j = 8, rowIndex = 0;

            //if (ViewState["CurrentTable"] != null)
            //{
            DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
            DataRow drCurrentRow = null;
            if (dtCurrentTable.Rows.Count > 0)
            {
                for (int i = 1; i <= j; i++)
                {
                    //extract the TextBox values
                    TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
                    TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
                    TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

                    drCurrentRow = dtCurrentTable.NewRow();
                    drCurrentRow["RowNumber"] = i + 1;

                    dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text;
                    dtCurrentTable.Rows[i - 1]["Column2"] = box2.Text;
                    dtCurrentTable.Rows[i - 1]["Column3"] = box3.Text;

                    ++rowIndex;
                }
                dtCurrentTable.Rows.Add(drCurrentRow);
                ViewState["CurrentTable"] = dtCurrentTable;

                Gridview1.DataSource = dtCurrentTable;
                Gridview1.DataBind();
            }
        }
        catch (Exception ex)
        {

        }
        //}
        //else
        //{
        //    Response.Write("ViewState is null");
        //}

        //Set Previous Data on Postbacks
       // 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++)
    //            {
    //                TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
    //                TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
    //                TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

    //                box1.Text = dt.Rows[i]["Column1"].ToString();
    //                box2.Text = dt.Rows[i]["Column2"].ToString();
    //                box3.Text = dt.Rows[i]["Column3"].ToString();

    //                rowIndex++;
    //            }
    //        }
    //    }
    //}
    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            SetInitialRow();
        }
    }
    protected void ButtonAdd_Click(object sender, EventArgs e)
    {
        AddNewRowToGrid();
    }

after debug I got an error: Index was out of range.调试后出现错误:索引超出范围。 Must be non-negative and less than the size of the collection.必须是非负的并且小于集合的大小。

Hope this will solve your problem希望这能解决你的问题

Page Load页面加载

  protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            load();
        }
    }

load()加载()

protected void load()
    {
     if (ViewState["CurrentData"] == null)
      {
       DataTable dt = (DataTable)ViewState["CurrentData"];
       BindGrid(1);
      }
    }

BindGrid()绑定网格()

 private void BindGrid(int rowcount)
    {
            DataTable dt = new DataTable();
            DataRow dr;
            DataColumn RcAccCode, RcAccAccount, RcAmount, RcAccId;
            int temp = 0;
            int a = 0;
            RcAccCode = new DataColumn("RcAccCode", Type.GetType("System.String"));
            RcAccAccount = new DataColumn("RcAccAccount", Type.GetType("System.String"));
            RcAmount = new DataColumn("RcAmount", Type.GetType("System.String"));
            RcAccId = new DataColumn("RcAccId", Type.GetType("System.String"));
            dt.Columns.Add(RcAccCode);
            dt.Columns.Add(RcAccAccount);
            dt.Columns.Add(RcAmount);
            dt.Columns.Add(RcAccId);
            TextBox TextBox1 = new TextBox();
            TextBox TextBox2 = new TextBox();
            TextBox TextBox3 = new TextBox();
                if (ViewState["CurrentData"] != null)
                {
                    dt = (DataTable)ViewState["CurrentData"];
                    if (dt.Rows.Count > 0)
                    {
                        dr = dt.NewRow();
                        dr[0] = dt.Rows[0][0].ToString();
                    }

                    for (int i = dt.Rows.Count - 1; i >= 0; i--)
                    {
                        DataRow dr1 = dt.Rows[i];
                        a = Convert.ToInt32(dr1["RcAccCode"].ToString());
                        break;
                    }
                    if (temp == 0)
                    {
                        dr = dt.NewRow();
                        dr[0] = a + 1;
                        dr[1] = TextBox1.Text;
                        dr[2] = TextBox2.Text;
                        dr[3] = TextBox3.Text;
                        dt.Rows.Add(dr);   
                    }
                }
                else
                {
                    dr = dt.NewRow();
                    dr[0] =1;
                    dr[1] = TextBox1.Text;
                    dr[2] = TextBox2.Text;
                    dr[3] = TextBox3.Text;
                    dt.Rows.Add(dr);
                }
            // If ViewState has a data then use the value as the DataSource
            if (ViewState["CurrentData"] != null)
            {
                Gridview1.DataSource = (DataTable)ViewState["CurrentData"];
                Gridview1.DataBind();     
            }
            else
            {
                // Bind GridView with the initial data assocaited in the DataTable
                Gridview1.DataSource = dt;
                Gridview1.DataBind();
            }
            // Store the DataTable in ViewState to retain the values
            ViewState["CurrentData"] = dt;
    }

Button Click Event按钮点击事件

    protected void ButtonAdd_Click(object sender, EventArgs e)
    {
        DataTable dt = (DataTable)ViewState["CurrentData"];
        int count = dt.Rows.Count;
        BindGrid(count);
    }

try This尝试这个

 private void SetInitialRow()
       {
           DataTable dt = new DataTable();
           DataRow dr = null;
           dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
           dt.Columns.Add(new DataColumn("Column1", typeof(string)));
           dt.Columns.Add(new DataColumn("Column2", typeof(string)));
           dt.Columns.Add(new DataColumn("Column3", typeof(string)));
           dr = dt.NewRow();
           dr["RowNumber"] = 1;
           dr["Column1"] = string.Empty;
           dr["Column2"] = string.Empty;
           dr["Column3"] = string.Empty;
           dt.Rows.Add(dr);
           ViewState["CurrentTable"] = dt;

           Gridview1.DataSource = dt;
           Gridview1.DataBind();
       }
       private void AddNewRowToGrid()
       {
           try
           {
               int j = 8, rowIndex = 0;

               DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
               DataRow drCurrentRow = null;

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

                       //extract the TextBox values
                     TextBox  box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
                     TextBox  box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
                     TextBox  box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

                       drCurrentRow = dtCurrentTable.NewRow();
                       drCurrentRow["RowNumber"] = i + 1;

                       dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text;
                       dtCurrentTable.Rows[i - 1]["Column2"] = box2.Text;
                       dtCurrentTable.Rows[i - 1]["Column3"] = box3.Text;
                       dtCurrentTable.Rows.Add(drCurrentRow);
                   }
                  // dtCurrentTable.Rows.Add(drCurrentRow);
                   ViewState["CurrentTable"] = dtCurrentTable;

                   Gridview1.DataSource = dtCurrentTable;
                   Gridview1.DataBind();
               }
           }
           catch (Exception ex)
          {

           }

       protected void Page_Load(object sender, EventArgs e)
       {

           if (!Page.IsPostBack)
           {
               SetInitialRow();
           }
       }
       protected void ButtonAdd_Click(object sender, EventArgs e)
       {
           AddNewRowToGrid();
       }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM