为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
呼唤远方 2023-07-09 15:20:52
我需要通过单击按钮在 Gridview 中动态添加&ldquo;n&rdquo;行和&ldquo;m&rdquo;列(行包含 m 个文本框)。当用户点击按钮时,一个特定的整数值被初始化为一个变量,该变量是所需的行数。假设它的值为 8,因此已动态创建包含 m 个文本框的 8 行。对于多行的功能,我只是添加了一些约束并注释了一些不需要的代码,如下代码所示: 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++) 调试后出现错误:索引超出范围。必须为非负数且小于集合的大小。
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

尝试这个


 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();

       }


查看完整回答
反对 回复 2023-07-09
?
互换的青春

TA贡献1797条经验 获得超6个赞

希望这能解决您的问题


页面加载


  protected void Page_Load(object sender, EventArgs e)

    {


        if (!Page.IsPostBack)

        {

            load();

        }

    }

加载()


protected void load()

    {

     if (ViewState["CurrentData"] == null)

      {

       DataTable dt = (DataTable)ViewState["CurrentData"];

       BindGrid(1);

      }

    }

绑定网格()


 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;

    }

按钮点击事件


    protected void ButtonAdd_Click(object sender, EventArgs e)

    {

        DataTable dt = (DataTable)ViewState["CurrentData"];

        int count = dt.Rows.Count;

        BindGrid(count);

    }


查看完整回答
反对 回复 2023-07-09
  • 2 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信