我已经问了 question关于这个问题,但是随着我在 web 应用程序中的进展,我再次偶然发现了这个问题,因为那里的答案给了我一个新问题。使用该解决方案,我遇到了更新按钮没有读取我的 gridview 文本框中的新值,而是读取旧值的问题。
代码隐藏
它不使用新值:
protected void Page_Load(object sender, EventArgs e)
{
LoadData();
if (!Page.IsPostBack)
{
DataBinder();
}
}
private void DataBinder()
{
Grid30.DataBind();
Grid31.DataBind();
Grid32.DataBind();
Grid33.DataBind();
Grid34.DataBind();
Grid35.DataBind();
Grid36.DataBind();
Grid37.DataBind();
Grid38.DataBind();
Grid40.DataBind();
Grid41.DataBind();
Grid42.DataBind();
Grid43.DataBind();
Grid44.DataBind();
Grid45.DataBind();
Grid51.DataBind();
Grid52.DataBind();
Grid53.DataBind();
Grid54.DataBind();
Grid55.DataBind();
Grid56.DataBind();
Grid57.DataBind();
Grid58.DataBind();
Grid61.DataBind();
Grid62.DataBind();
Grid63.DataBind();
Grid64.DataBind();
}
有了这个,它获得了新的值(value),但它不再刷新:
protected void Page_Load(object sender, EventArgs e)
{
LoadData();
DataBinder();
}
private void DataBinder()
{
if (!Page.IsPostBack)
{
Grid30.DataBind();
Grid31.DataBind();
Grid32.DataBind();
Grid33.DataBind();
Grid34.DataBind();
Grid35.DataBind();
Grid36.DataBind();
Grid37.DataBind();
Grid38.DataBind();
Grid40.DataBind();
Grid41.DataBind();
Grid42.DataBind();
Grid43.DataBind();
Grid44.DataBind();
Grid45.DataBind();
Grid51.DataBind();
Grid52.DataBind();
Grid53.DataBind();
Grid54.DataBind();
Grid55.DataBind();
Grid56.DataBind();
Grid57.DataBind();
Grid58.DataBind();
Grid61.DataBind();
Grid62.DataBind();
Grid63.DataBind();
Grid64.DataBind();
}
}
更新/加载数据代码
protected void Grid36_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = Grid36.Rows[e.RowIndex];
var txtQuantity = (TextBox)row.FindControl("Spoor36TB");
int quantity = int.Parse(txtQuantity.Text);
Grid36.EditIndex = -1;
DataBinder();
}
private void LoadData()
{
foreach(Rail rail in getAllPositions())
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn(rail.RailNr.ToString(), typeof(string)));
for (int i = 0; i < rail.AmountOfPositions; i++)
{
DataRow dr = dt.NewRow();
dr[rail.RailNr.ToString()] = "1";
dt.Rows.Add(dr);
}
DataSources(rail.RailNr, dt);
}
}
编辑 好吧,我删除了 DataBinder();在 Grid36_RowEditing() 下。这不是真正的解决方案,但目前是一个糟糕的解决方法。现在我必须按两次编辑按钮,但至少我可以更新网格。虽然这对我的问题来说不是/一个可怕的解决方案,但我希望有人仍然能够给我一个真正的解决方案
protected void Grid36_RowEditing(object sender, GridViewEditEventArgs e)
{
Grid36.EditIndex = e.NewEditIndex;
//DataBinder();
}
最佳答案
在行更新方法中,更新数据库中的值,然后执行数据源和数据绑定(bind)方法。
例子:-
GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];
int id = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());
TextBox tname = (TextBox)row.FindControl("nam");
TextBox tques = (TextBox)row.FindControl("que");
MySqlCommand cmd = new MySqlCommand("update exam set name1=@name,ques=@ques where id = @id", con);
cmd.Parameters.Add("@id", MySqlDbType.Int16).Value = id;
cmd.Parameters.Add("@name", MySqlDbType.VarChar, 30).Value = tname.Text.Trim();
cmd.Parameters.Add("@ques", MySqlDbType.VarChar,40).Value = tques.Text.Trim();
con.Open();
cmd.ExecuteNonQuery();
GridView1.EditIndex = -1;
// Bind grid now
GridView1.DataSource= dt; // get data from database
GridView1.Databind();
关于c# - 单击 gridview 按钮时页面不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13976167/