如何更新datagridview上的数据 [英] How do i update data on a datagridview

查看:47
本文介绍了如何更新datagridview上的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码在datagridview上添加了一个新行,并显示了对新行的更改,而不是更新所选行

The below code adds a new row on the datagridview and shows changes on a new row instead of updating the selected row

    #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

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

推荐答案

您可以创建一个类来存储值:

You can create a class to store the value:
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:

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;
    }
}



用于在gridview中显示列表的简单页面设计:


A simple page design for displaying the list in gridview:

<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:

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



编辑数据的示例代码,EditProject.aspx:


sample code behind for editing the data, EditProject.aspx:

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


这篇关于如何更新datagridview上的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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