【问题标题】:How to update a gridview after saving data?保存数据后如何更新gridview?
【发布时间】:2012-06-01 17:47:55
【问题描述】:

我有一个包含 4 列的网格视图(用户 ID、描述、密码、更改密码[按钮])。

当我单击更改密码时,会出现带有 3 个文本框(用户 ID、新密码、确认密码)的面板并显示保存按钮。

更改密码后,面板消失,但网格视图中的密码与以前相同。

我想更新密码栏。

以下是我的保存按钮点击
代码

protected void BindGridView()
{
    try
    {
        DataTable dt = new DataTable();
        dt = (DataTable)Session["userinfo"];

        gvPassInfo.DataSource = dt;
        gvPassInfo.DataBind();
    }
    catch (Exception ex)
    {
        //lblMessage.Text = DataObjects.Error_Message();
    }  
 }
 protected void btnSave_Click(object sender, EventArgs e)
 {
    clsUser objuser = new clsUser();
    string user = txtUserid.Text;
    string NewPassword = txtNewPassword.Text;
    string ConfirmPassword = txtConfirmNewPassword.Text;
    objuser.UpdateSystemPassword(user, NewPassword);
    Response.Write("<script LANGUAGE='JavaScript' >alert('Password Changed   Successfully...'); document.location='" +ResolveClientUrl("~\\PasswordInformation_Details.aspx") + "'; </script>");
    BindGridView();
    panelChangePassword.Visible = false;

   }                                                                                     
protected void btnSearch1_Click(object sender, EventArgs e)
{
    try
    {
        using (MySqlConnection conn = new MySqlConnection(clsUser.connStr))
        {
            conn.Open();
            string strQuery = "select DISTINCT user_id,description,sap_system_password from sap_password_info where user_id is not null";
            if (txtSid.Text !="")
            {
                strQuery += " AND sid = '" + txtSid.Text + "'";
            }
            if (txtClient.Text != "")
            {
                strQuery += " AND client_no = '" + txtClient.Text + "'";
            }
            if (txtUser.Text != "")
            {
                strQuery += " AND user_id = '" + txtUser.Text + "'";
            }

            MySqlCommand cmd = new MySqlCommand(strQuery, conn);
            DataTable dt = new DataTable();
            dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection));
            Session["userinfo"] = dt;
            Response.Redirect("~\\PasswordInformation_Details.aspx");
        }
    }
    catch (Exception ex)
    {
        //lblMessage.Text = DataObjects.Error_Message();
        lblMsg.Text = ex.Message.ToString();
    }

}

代码是C#,后端是MySQL DB Server..请帮忙..

【问题讨论】:

  • 再次绑定到(更新的)数据源。

标签: c# asp.net mysql


【解决方案1】:

在 button_click 事件中,将您的 gridview 绑定到一个新列表。

List<something> k = //your sql stuff
GridView1.DataSource = k;
GridView1.DataBind();

【讨论】:

  • 我还没有写任何点击事件。而是编写了 gridview_RowCommand 和 gridview_RowEditing 事件。怎么重新绑定?
  • 你能给我们看更多的代码吗? .aspx 页面中的 gridview,以及 .cs 文件中的 row_command 和 row_editing 会有所帮助
【解决方案2】:

阅读此tutorial。互联网上有很多针对 ASP.NET 初学者的教程。谷歌它..

已编辑:保存密码后,从数据库(而不是会话)加载您的 datatable 并将其再次绑定到您的网格视图。

这样

DataTable dt = new DataTable();
dt = //LoadFromDB();    // load data from database not session

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

【讨论】:

  • 大声笑,请使用此代码编辑您的原始答案,就像这样,它只是不可读
  • 我没有收到这一行 dt = //LoadFromDB();在 dt= i m juz 获得加载选项之后。
  • 这就是为什么你应该认真考虑首先阅读一些教程。你必须有一些方法隐藏在某个地方,返回用户和密码的 List。你只需调用 objuser.NameOfThatMethod();所以,gvPassInfo.Datasource = objuser.NameOfThatMethod(); ..
  • bt y 我需要为此编写方法吗?我有 BindGridview 方法,我在其中绑定数据库中的数据..
  • @Abu:你更新了数据库中的密码,所以很明显你应该从数据库中加载更新的数据,而不是从会话中加载。只需再次调用您用于绑定gridview 的加载数据逻辑。请自己想一些合乎逻辑的事情:(
【解决方案3】:

在您的更新事件/保存按钮点击事件结束时更新GridView

编辑

您正在更新数据库中的记录,但您没有获取新数据,这就是您获取旧信息的原因

所以在下面的语句从数据库中获取数据并用新数据更新会话数据集之后,你的问题就会解决......

 objuser.UpdateSystemPassword(user, NewPassword);
 //get the updated data from the database after this statement
 //don't forget to update the session with new data

在旧页面中写这段代码

Dictionary<string,string> infor = new Dictionary<string,string>();
infor["sid"] = txtSid.Text;
infor["client_no"] = txtClient.Text;
..
...
Session["queryInfo"] = infor;

在新文件中

GetDataFromDB()
{
Dictionary<string,string> infor = (Dictionary<string,string>)Session["queryInfo"];

try
{
    using (MySqlConnection conn = new MySqlConnection(clsUser.connStr))
    {
        conn.Open();
        string strQuery = "select DISTINCT user_id,description,sap_system_password from sap_password_info where user_id is not null";
        if (infor["sid"] !="")
        {
            strQuery += " AND sid = '" + infor["sid"] + "'";
        }
        //... do like above for remaining if conditions

        MySqlCommand cmd = new MySqlCommand(strQuery, conn);
        DataTable dt = new DataTable();
        dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection));
        Session["userinfo"] = dt;
        //Response.Redirect("~\\PasswordInformation_Details.aspx");
    }
}
catch (Exception ex)
{
     throw;
}
}

【讨论】:

  • @Abu 首先你能告诉我逻辑,你如何从数据库中获取数据并存储在会话中
  • 我只是写了一个 BindGridview() 方法,没有别的东西来获取数据。
  • @Abu 可能是你被写来从不同页面中的数据库中获取数据,搜索你在会话中实际存储数据表的项目。就像Session["userinfo"] = &lt;your datatable name&gt;;
  • Juz 再次看到这个问题,我已经在另一个页面中使用搜索按钮代码对其进行了编辑。我认为这是从数据库获取数据的代码。
  • @Abu 所以再次调用该代码您的问题将解决,您可能需要将 Sid、client_no 和 user_id 保存在 Session 中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多