locked
Retain last value of add new row item RRS feed

Answers

  • User1535942433 posted

    Hi Gopi.MCA,

    Accroding to your description,as far as I think,you could viewstate datatable value in rowdatabound event.

    Just like this:

     <asp:GridView ID="Gridview1" runat="server" ShowFooter="true"
                    AutoGenerateColumns="false"
                    OnRowCreated="Gridview1_RowCreated" OnRowDataBound="Gridview1_RowDataBound">
                    <Columns>
                        <asp:BoundField DataField="RowNumber" HeaderText="Row Number" />
                        <asp:TemplateField HeaderText="Header 1">
                            <ItemTemplate>
                                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Header 2">
                            <ItemTemplate>
                                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Header 3">
                            <ItemTemplate>
                                <asp:DropDownList ID="DropDownList1" runat="server"
                                    AppendDataBoundItems="true">
                                    <asp:ListItem Value="-1">Select</asp:ListItem>
                                </asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Header 4">
                            <ItemTemplate>
                                <asp:DropDownList ID="DropDownList2" runat="server"
                                    AppendDataBoundItems="true">
                                    <asp:ListItem Value="-1">Select</asp:ListItem>
                                </asp:DropDownList>
                            </ItemTemplate>
                            <FooterStyle HorizontalAlign="Right" />
                            <FooterTemplate>
                                <asp:Button ID="ButtonAdd" runat="server"
                                    Text="Add New Row" 
                                    OnClick="ButtonAdd_Click" />
                            </FooterTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:LinkButton ID="LinkButton1" runat="server"
                                    OnClick="LinkButton1_Click">Remove</asp:LinkButton>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

    Code-behind:

     private ArrayList GetDummyData()
            {
    
                ArrayList arr = new ArrayList();
    
                arr.Add(new ListItem("Item1", "1"));
                arr.Add(new ListItem("Item2", "2"));
                arr.Add(new ListItem("Item3", "3"));
                arr.Add(new ListItem("Item4", "4"));
                arr.Add(new ListItem("Item5", "5"));
    
                return arr;
            }
    
            private void FillDropDownList(DropDownList ddl)
            {
                ArrayList arr = GetDummyData();
    
                foreach (ListItem item in arr)
                {
                    ddl.Items.Add(item);
                }
            }
    
            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)));//for TextBox value   
                dt.Columns.Add(new DataColumn("Column2", typeof(string)));//for TextBox value   
                dt.Columns.Add(new DataColumn("Column3", typeof(string)));//for DropDownList selected item   
                dt.Columns.Add(new DataColumn("Column4", typeof(string)));//for DropDownList selected item   
    
                dr = dt.NewRow();
                dr["RowNumber"] = 1;
                dr["Column1"] = string.Empty;
                dr["Column2"] = string.Empty;
                dt.Rows.Add(dr);
    
                //Store the DataTable in ViewState for future reference   
                ViewState["CurrentTable"] = dt;
    
                //Bind the Gridview   
                Gridview1.DataSource = dt;
                Gridview1.DataBind();
    
                //After binding the gridview, we can then extract and fill the DropDownList with Data   
                DropDownList ddl1 = (DropDownList)Gridview1.Rows[0].Cells[3].FindControl("DropDownList1");
                DropDownList ddl2 = (DropDownList)Gridview1.Rows[0].Cells[4].FindControl("DropDownList2");
                FillDropDownList(ddl1);
                FillDropDownList(ddl2);
            }
    
            private void AddNewRowToGrid()
            {
    
                if (ViewState["CurrentTable"] != null)
                {
    
                    DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
                    DataRow drCurrentRow = null;
    
                    if (dtCurrentTable.Rows.Count > 0)
                    {
                        drCurrentRow = dtCurrentTable.NewRow();
                        drCurrentRow["RowNumber"] = dtCurrentTable.Rows.Count + 1;
    
                        //add new row to DataTable   
                        dtCurrentTable.Rows.Add(drCurrentRow);
                        //Store the current data to ViewState for future reference   
    
                        ViewState["CurrentTable"] = dtCurrentTable;
    
    
                        for (int i = 0; i < dtCurrentTable.Rows.Count - 1; i++)
                        {
    
                            //extract the TextBox values   
    
                            TextBox box1 = (TextBox)Gridview1.Rows[i].Cells[1].FindControl("TextBox1");
                            TextBox box2 = (TextBox)Gridview1.Rows[i].Cells[2].FindControl("TextBox2");
    
                            dtCurrentTable.Rows[i]["Column1"] = box1.Text;
                            dtCurrentTable.Rows[i]["Column2"] = box2.Text;
    
                            //extract the DropDownList Selected Items   
    
                            DropDownList ddl1 = (DropDownList)Gridview1.Rows[i].Cells[3].FindControl("DropDownList1");
                            DropDownList ddl2 = (DropDownList)Gridview1.Rows[i].Cells[4].FindControl("DropDownList2");
    
                            dtCurrentTable.Rows[i]["Column3"] = ddl1.SelectedItem.Text;
                            dtCurrentTable.Rows[i]["Column4"] = ddl2.SelectedItem.Text;
    
                            // Update the DataRow with the DDL Selected Items   
                        }
                        //Rebind the Grid with the current data to reflect changes   
                        Gridview1.DataSource = dtCurrentTable;
                        Gridview1.DataBind();
                    }
                }
                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[i].Cells[1].FindControl("TextBox1");
                            TextBox box2 = (TextBox)Gridview1.Rows[i].Cells[2].FindControl("TextBox2");
    
                            DropDownList ddl1 = (DropDownList)Gridview1.Rows[rowIndex].Cells[3].FindControl("DropDownList1");
                            DropDownList ddl2 = (DropDownList)Gridview1.Rows[rowIndex].Cells[4].FindControl("DropDownList2");
    
                            //Fill the DropDownList with Data   
                            FillDropDownList(ddl1);
                            FillDropDownList(ddl2);
    
    
                            if (i < dt.Rows.Count - 1)
                            {
    
                                //Assign the value from DataTable to the TextBox   
                                box1.Text = dt.Rows[i]["Column1"].ToString();
                                box2.Text = dt.Rows[i]["Column2"].ToString();
    
                                //Set the Previous Selected Items on Each DropDownList  on Postbacks   
                                ddl1.ClearSelection();
                                ddl1.Items.FindByText(dt.Rows[i]["Column3"].ToString()).Selected = true;
    
                                ddl2.ClearSelection();
                                ddl2.Items.FindByText(dt.Rows[i]["Column4"].ToString()).Selected = true;
    
                            }
    
                            rowIndex++;
                        }
                    }
                }
            }
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    SetInitialRow();
                }
            }
    
            protected void ButtonAdd_Click(object sender, EventArgs e)
            {
                AddNewRowToGrid();
            }
    
            protected void Gridview1_RowCreated(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    DataTable dt = (DataTable)ViewState["CurrentTable"];
                    LinkButton lb = (LinkButton)e.Row.FindControl("LinkButton1");
                    if (lb != null)
                    {
                        if (dt.Rows.Count > 1)
                        {
                            if (e.Row.RowIndex == dt.Rows.Count - 1)
                            {
                                lb.Visible = false;
                            }
                        }
                        else
                        {
                            lb.Visible = false;
                        }
                    }
                }
            }
    
            protected void LinkButton1_Click(object sender, EventArgs e)
            {
                LinkButton lb = (LinkButton)sender;
                GridViewRow gvRow = (GridViewRow)lb.NamingContainer;
                int rowID = gvRow.RowIndex;
                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 and reset row number  
                            dt.Rows.Remove(dt.Rows[rowID]);
                            ResetRowID(dt);
                        }
                    }
    
                    //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();
                }
    
                //Set Previous Data on Postbacks  
                SetPreviousData();
            }
    
            private void ResetRowID(DataTable dt)
            {
                int rowNumber = 1;
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        row[0] = rowNumber;
                        rowNumber++;
                    }
                }
            }
    
            protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    var dropdownList = e.Row.FindControl("DropDownList1") as DropDownList;
                    if (e.Row.RowIndex != 0)
                    {
                        DataTable dtAgents = (DataTable)ViewState["CurrentTable"];
                        for (int i = 0; i < dtAgents.Rows.Count; i++)
                        {
                            if (i == 0)
                            {
                                var predropdownList = dtAgents.Rows[i]["Column3"].ToString();
                                dropdownList.SelectedItem.Text = predropdownList;
                            }
                            else
                            {
                                var predropdownList = dtAgents.Rows[i - 1]["Column3"].ToString();
                                dropdownList.SelectedItem.Text = predropdownList;
                            }
                        }
                    }
                    
                    
                }
            }

    Result:

    Best regards,

    Yijing Sun

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Tuesday, December 29, 2020 3:55 AM

All replies

  • User1535942433 posted

    Hi Gopi.MCA,

    Accroding to your description,I don't understand your requirment clearly.I have created a test and when I click the "add row" button,it will add a new dropdownlist with "select".Just like this:

    Could you post your codes and sample to us? It will help us to solve your problems.

    Best regards,

    Yijing Sun

    Monday, December 28, 2020 2:45 AM
  • User-807418713 posted

    Hello in hearer3 rownumber 1 you have selected item1 on add new row also I want to show item1 only not select..

    Whenever add new row button click then last value to be store in header3 column drop-down

    Monday, December 28, 2020 5:19 AM
  • User-1716253493 posted

    Use gridview databound event to get last value, then using findcontrol get the ddl from the headerrow. Select the item you want

    Or use session variabel or viewstate variable, set the value while inserting data. Then like above way set selected ddl from the variable in databound event

    Monday, December 28, 2020 1:46 PM
  • User1535942433 posted

    Hi Gopi.MCA,

    Accroding to your description,as far as I think,you could viewstate datatable value in rowdatabound event.

    Just like this:

     <asp:GridView ID="Gridview1" runat="server" ShowFooter="true"
                    AutoGenerateColumns="false"
                    OnRowCreated="Gridview1_RowCreated" OnRowDataBound="Gridview1_RowDataBound">
                    <Columns>
                        <asp:BoundField DataField="RowNumber" HeaderText="Row Number" />
                        <asp:TemplateField HeaderText="Header 1">
                            <ItemTemplate>
                                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Header 2">
                            <ItemTemplate>
                                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Header 3">
                            <ItemTemplate>
                                <asp:DropDownList ID="DropDownList1" runat="server"
                                    AppendDataBoundItems="true">
                                    <asp:ListItem Value="-1">Select</asp:ListItem>
                                </asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Header 4">
                            <ItemTemplate>
                                <asp:DropDownList ID="DropDownList2" runat="server"
                                    AppendDataBoundItems="true">
                                    <asp:ListItem Value="-1">Select</asp:ListItem>
                                </asp:DropDownList>
                            </ItemTemplate>
                            <FooterStyle HorizontalAlign="Right" />
                            <FooterTemplate>
                                <asp:Button ID="ButtonAdd" runat="server"
                                    Text="Add New Row" 
                                    OnClick="ButtonAdd_Click" />
                            </FooterTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:LinkButton ID="LinkButton1" runat="server"
                                    OnClick="LinkButton1_Click">Remove</asp:LinkButton>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

    Code-behind:

     private ArrayList GetDummyData()
            {
    
                ArrayList arr = new ArrayList();
    
                arr.Add(new ListItem("Item1", "1"));
                arr.Add(new ListItem("Item2", "2"));
                arr.Add(new ListItem("Item3", "3"));
                arr.Add(new ListItem("Item4", "4"));
                arr.Add(new ListItem("Item5", "5"));
    
                return arr;
            }
    
            private void FillDropDownList(DropDownList ddl)
            {
                ArrayList arr = GetDummyData();
    
                foreach (ListItem item in arr)
                {
                    ddl.Items.Add(item);
                }
            }
    
            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)));//for TextBox value   
                dt.Columns.Add(new DataColumn("Column2", typeof(string)));//for TextBox value   
                dt.Columns.Add(new DataColumn("Column3", typeof(string)));//for DropDownList selected item   
                dt.Columns.Add(new DataColumn("Column4", typeof(string)));//for DropDownList selected item   
    
                dr = dt.NewRow();
                dr["RowNumber"] = 1;
                dr["Column1"] = string.Empty;
                dr["Column2"] = string.Empty;
                dt.Rows.Add(dr);
    
                //Store the DataTable in ViewState for future reference   
                ViewState["CurrentTable"] = dt;
    
                //Bind the Gridview   
                Gridview1.DataSource = dt;
                Gridview1.DataBind();
    
                //After binding the gridview, we can then extract and fill the DropDownList with Data   
                DropDownList ddl1 = (DropDownList)Gridview1.Rows[0].Cells[3].FindControl("DropDownList1");
                DropDownList ddl2 = (DropDownList)Gridview1.Rows[0].Cells[4].FindControl("DropDownList2");
                FillDropDownList(ddl1);
                FillDropDownList(ddl2);
            }
    
            private void AddNewRowToGrid()
            {
    
                if (ViewState["CurrentTable"] != null)
                {
    
                    DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
                    DataRow drCurrentRow = null;
    
                    if (dtCurrentTable.Rows.Count > 0)
                    {
                        drCurrentRow = dtCurrentTable.NewRow();
                        drCurrentRow["RowNumber"] = dtCurrentTable.Rows.Count + 1;
    
                        //add new row to DataTable   
                        dtCurrentTable.Rows.Add(drCurrentRow);
                        //Store the current data to ViewState for future reference   
    
                        ViewState["CurrentTable"] = dtCurrentTable;
    
    
                        for (int i = 0; i < dtCurrentTable.Rows.Count - 1; i++)
                        {
    
                            //extract the TextBox values   
    
                            TextBox box1 = (TextBox)Gridview1.Rows[i].Cells[1].FindControl("TextBox1");
                            TextBox box2 = (TextBox)Gridview1.Rows[i].Cells[2].FindControl("TextBox2");
    
                            dtCurrentTable.Rows[i]["Column1"] = box1.Text;
                            dtCurrentTable.Rows[i]["Column2"] = box2.Text;
    
                            //extract the DropDownList Selected Items   
    
                            DropDownList ddl1 = (DropDownList)Gridview1.Rows[i].Cells[3].FindControl("DropDownList1");
                            DropDownList ddl2 = (DropDownList)Gridview1.Rows[i].Cells[4].FindControl("DropDownList2");
    
                            dtCurrentTable.Rows[i]["Column3"] = ddl1.SelectedItem.Text;
                            dtCurrentTable.Rows[i]["Column4"] = ddl2.SelectedItem.Text;
    
                            // Update the DataRow with the DDL Selected Items   
                        }
                        //Rebind the Grid with the current data to reflect changes   
                        Gridview1.DataSource = dtCurrentTable;
                        Gridview1.DataBind();
                    }
                }
                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[i].Cells[1].FindControl("TextBox1");
                            TextBox box2 = (TextBox)Gridview1.Rows[i].Cells[2].FindControl("TextBox2");
    
                            DropDownList ddl1 = (DropDownList)Gridview1.Rows[rowIndex].Cells[3].FindControl("DropDownList1");
                            DropDownList ddl2 = (DropDownList)Gridview1.Rows[rowIndex].Cells[4].FindControl("DropDownList2");
    
                            //Fill the DropDownList with Data   
                            FillDropDownList(ddl1);
                            FillDropDownList(ddl2);
    
    
                            if (i < dt.Rows.Count - 1)
                            {
    
                                //Assign the value from DataTable to the TextBox   
                                box1.Text = dt.Rows[i]["Column1"].ToString();
                                box2.Text = dt.Rows[i]["Column2"].ToString();
    
                                //Set the Previous Selected Items on Each DropDownList  on Postbacks   
                                ddl1.ClearSelection();
                                ddl1.Items.FindByText(dt.Rows[i]["Column3"].ToString()).Selected = true;
    
                                ddl2.ClearSelection();
                                ddl2.Items.FindByText(dt.Rows[i]["Column4"].ToString()).Selected = true;
    
                            }
    
                            rowIndex++;
                        }
                    }
                }
            }
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    SetInitialRow();
                }
            }
    
            protected void ButtonAdd_Click(object sender, EventArgs e)
            {
                AddNewRowToGrid();
            }
    
            protected void Gridview1_RowCreated(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    DataTable dt = (DataTable)ViewState["CurrentTable"];
                    LinkButton lb = (LinkButton)e.Row.FindControl("LinkButton1");
                    if (lb != null)
                    {
                        if (dt.Rows.Count > 1)
                        {
                            if (e.Row.RowIndex == dt.Rows.Count - 1)
                            {
                                lb.Visible = false;
                            }
                        }
                        else
                        {
                            lb.Visible = false;
                        }
                    }
                }
            }
    
            protected void LinkButton1_Click(object sender, EventArgs e)
            {
                LinkButton lb = (LinkButton)sender;
                GridViewRow gvRow = (GridViewRow)lb.NamingContainer;
                int rowID = gvRow.RowIndex;
                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 and reset row number  
                            dt.Rows.Remove(dt.Rows[rowID]);
                            ResetRowID(dt);
                        }
                    }
    
                    //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();
                }
    
                //Set Previous Data on Postbacks  
                SetPreviousData();
            }
    
            private void ResetRowID(DataTable dt)
            {
                int rowNumber = 1;
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        row[0] = rowNumber;
                        rowNumber++;
                    }
                }
            }
    
            protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    var dropdownList = e.Row.FindControl("DropDownList1") as DropDownList;
                    if (e.Row.RowIndex != 0)
                    {
                        DataTable dtAgents = (DataTable)ViewState["CurrentTable"];
                        for (int i = 0; i < dtAgents.Rows.Count; i++)
                        {
                            if (i == 0)
                            {
                                var predropdownList = dtAgents.Rows[i]["Column3"].ToString();
                                dropdownList.SelectedItem.Text = predropdownList;
                            }
                            else
                            {
                                var predropdownList = dtAgents.Rows[i - 1]["Column3"].ToString();
                                dropdownList.SelectedItem.Text = predropdownList;
                            }
                        }
                    }
                    
                    
                }
            }

    Result:

    Best regards,

    Yijing Sun

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Tuesday, December 29, 2020 3:55 AM