Click here to Skip to main content
15,891,372 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
The below code adds a new row on the datagridview and shows changes on a new row instead of updating the selected row
C#
    #region Project Submit Button
    protected void btnSubmitProject_Click(object sender, EventArgs e)
    {
        try
        {
            if (dt == null)
            {
                dt = new DataTable();
                DataColumn dc1 = new DataColumn("ProjectName");
                DataColumn dc2 = new DataColumn("Description");

                dt.Columns.Add(dc1);
                dt.Columns.Add(dc2);
                DataRow dr1 = dt.NewRow();
            }


                dr1[0] = txtProjectName.Text;
                dr1[1] = txtDescription.Text;

                dt.Rows.Add(dr1);

                gvProjects.DataSource = dt;
                gvProjects.DataBind();

                Session["data_table"] = dt;

                Panel3.Visible = false;
                Panel2.Visible = true;


        }
        catch (Exception ex)
        {
            lblProjectmsg.Text = ex.Message;
        }
        ProjectClearfields();
    }
    #endregion

    #region Project Clear Button
    protected void btnClearProject_Click(object sender, EventArgs e)
    {
        ProjectClearfields();
        txtProjectName.Focus();
    }
    #endregion

    #region Project Cancel Button
    protected void btnCancelProject_Click(object sender, EventArgs e)
    {
        ProjectClearfields();
        Panel2.Visible = true;
        Panel3.Visible = false;
    }
    #endregion

    #region Projects_RowDeleting Change Event
    protected void gvProjects_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        Session["data_table"] = dt;

        if (dt.Rows.Count > 0)
        {
            dt.Rows[e.RowIndex].Delete();
            gvProjects.DataSource = dt;
            gvProjects.DataBind();
        }
    }
    #endregion

    #region Projects_Updating Change Event
    protected void gvProjects_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        Panel3.Visible = true;
        Panel2.Visible = false;

        string ProjectName = null;
        string Description = null;


        for (int i = 0; i < gvProjects.Rows.Count; i++)
        {
            ProjectName = ((TextBox)gvProjects.Rows[i].FindControl("txtProjectName")).Text.Trim();
            Description = ((TextBox)gvProjects.Rows[i].FindControl("txtDescription")).Text.Trim();
        }

        txtProjectName.Text = ProjectName;
        txtDescription.Text = Description;
    }
    #endregion
}


What I have tried:

I have tried inserting else
C#
        protected void btnSubmitProject_Click(object sender, EventArgs e)
        {
            try
            {
                if (dt == null)
                {
                    dt = new DataTable();
                    DataColumn dc1 = new DataColumn("ProjectName");
                    DataColumn dc2 = new DataColumn("Description");

                    dt.Columns.Add(dc1);
                    dt.Columns.Add(dc2);
                    DataRow dr1 = dt.NewRow();
                }
                else{

                    dr1[0] = txtProjectName.Text;
                    dr1[1] = txtDescription.Text;

                    dt.Rows.Add(dr1);

                    gvProjects.DataSource = dt;
                    gvProjects.DataBind();

                    Session["data_table"] = dt;

                    Panel3.Visible = false;
                    Panel2.Visible = true;
                

            }
}
            catch (Exception ex)
            {
                lblProjectmsg.Text = ex.Message;
            }
            ProjectClearfields();
        }
Posted
Updated 4-Mar-16 5:14am
v3
Comments
VR Karthikeyan 4-Mar-16 2:43am    
where are you stuck? you showed full code, just figure out where you have problem? Or give a clear explanation about your problem. Use improve question link.
Sinisa Hajnal 4-Mar-16 3:39am    
Even in else block, you're calling dt.Rows.Add method. It, not surprisingly, adds the row to the datatable. You need to edit selected row cells and do nothing else (eventually call dt.AcceptChanges, but then you lose the information which row was changed)

Also, it is not clear where dr1 comes from in your else statement.

1 solution

You can create a class to store the value:
C#
public class Project
{
    public int Id { get; set; }
    public string ProjectName { get; set; }
    public string Description { get; set; }
}

then save the list of class object in session:
C#
public class SessionData
{
    public static int IdIndex = 0;

    public static List<Project> ProjectList
    {
        get
        {
            if (HttpContext.Current.Session["ProjectList"] == null)
                HttpContext.Current.Session["ProjectList"] = new List<Project>();
            return (List<Project>)HttpContext.Current.Session["ProjectList"];
        }
        set
        {
            HttpContext.Current.Session["ProjectList"] = value;
        }
    }

    public static int GetNewID()
    {
        IdIndex = IdIndex + 1;
        return IdIndex;
    }
}

A simple page design for displaying the list in gridview:
ASP.NET
<asp:Button ID="btAdd" runat="server" Text="Add Project" OnClick="btAdd_Click" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
     EmptyDataText="No data" ShowHeaderWhenEmpty="True">
    <Columns>
        <asp:HyperLinkField DataNavigateUrlFields="Id"
            DataNavigateUrlFormatString="EditProject.aspx?id={0}" Text="Edit" />
        <asp:BoundField DataField="ProjectName" HeaderText="Project Name" />
        <asp:BoundField DataField="Description" HeaderText="Description" />
    </Columns>
</asp:GridView>

code behind of the page list:
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        GridView1.DataSource = SessionData.ProjectList;
        GridView1.DataBind();
    }
}

protected void btAdd_Click(object sender, EventArgs e)
{
    Response.Redirect("EditProject.aspx", true);
}

sample code behind for editing the data, EditProject.aspx:
C#
public partial class EditProject : System.Web.UI.Page
{
    int id
    {
        get
        {
            int _id = 0;
            int.TryParse(ViewState["id"] + "", out _id);
            return _id;
        }
        set
        {
            ViewState["id"] = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            int _id = 0;
            int.TryParse(Request.QueryString["id"], out _id);
            id = _id;
            LoadData();
        }
    }

    void LoadData()
    {
        foreach (var p in SessionData.ProjectList)
        {
            if (p.Id == id)
            {
                label1.Text = id.ToString();
                txtProjectName.Text = p.ProjectName;
                txtDescription.Text = p.Description;
                break;
            }
        }
    }

    protected void btSave_Click(object sender, EventArgs e)
    {
        if (id == 0)
        {
            id = SessionData.GetNewID();
            Project p = new Project()
            {
                Id = id,
                ProjectName = txtProjectName.Text,
                Description = txtDescription.Text
            };
            SessionData.ProjectList.Add(p);
        }
        else
        {
            foreach (var p in SessionData.ProjectList)
            {
                if (p.Id == id)
                {
                    p.ProjectName = txtProjectName.Text;
                    p.Description = txtDescription.Text;
                    break;
                }
            }
        }
        Response.Redirect("~/ProjectList.aspx", true);
    }
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900