GridView RowUpdating没有获取新数据

Pro*_*kzy 5 c# asp.net gridview

尝试更新GridView数据时,它成功运行,但它获取旧数据而不是您在文本框中键入的数据.

这就是我所拥有的:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        string name = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text;
        string phone = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text;
        string email = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text;
        int contactId = Convert.ToInt32(((TextBox)(GridView1.Rows[e.RowIndex].Cells[4].Controls[0])).Text);
        objLogic.UpdateContact(name, phone, email, contactId);  //passes values to SQL to update database
        GridView1.EditIndex = -1;
        GridView1.DataBind();
    }
Run Code Online (Sandbox Code Playgroud)

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;
        GridView1.DataBind();
    }
Run Code Online (Sandbox Code Playgroud)

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DropDownList1.DataSource = objLogic.LoadClient();
            DropDownList1.DataTextField = "name";
            DropDownList1.DataValueField = "clientId";
            DropDownList1.DataBind();
        }

        GridView1.DataSource = objLogic.LoadContacts(Convert.ToInt16(DropDownList1.SelectedValue));
        GridView1.DataBind();
Run Code Online (Sandbox Code Playgroud)

例如,当前数据是:

姓名:Blake,电话:123-234-3456,电子邮件:test @ test.com,contactId:22

我输入新数据:

姓名:John,电话:555-555-5555,电子邮件:test2@test2.com,contactId:22

最终在数据库中的数据:

姓名:Blake,电话:123-234-3456,电子邮件:test @ test.com,contactId:22

Mar*_*rse 4

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DropDownList1.DataSource = objLogic.LoadClient();
        DropDownList1.DataTextField = "name";
        DropDownList1.DataValueField = "clientId";
        DropDownList1.DataBind();
        BindGrid();
    }
 }

protected void BindGrid()
{
    GridView1.DataSource = objLogic.LoadContacts(Convert.ToInt16(DropDownList1.SelectedValue));
    GridView1.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

每次页面回发时,您都会重新绑定网格。将网格的绑定移至单独的函数中。完成行更新后,重新绑定网格。

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    string name = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text;
    string phone = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text;
    string email = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text;
    int contactId = Convert.ToInt32(((TextBox)(GridView1.Rows[e.RowIndex].Cells[4].Controls[0])).Text);
    objLogic.UpdateContact(name, phone, email, contactId);  //passes values to SQL to update database
    GridView1.EditIndex = -1;
    BindGrid();
}
Run Code Online (Sandbox Code Playgroud)

当您编辑时,您也必须调用 BindGrid。

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridView1.EditIndex = e.NewEditIndex;
    //GridView1.DataBind(); this is meaningless, you have not set a DataSource
    BindGrid();
}
Run Code Online (Sandbox Code Playgroud)