2012-12-20 87 views
2

我已经问了一个question关于这个问题,但随着我在我的web应用程序的进步,我偶然发现了这个问题,因为那里的答案给了我一个新问题。有了这个解决方案,我遇到了这样的问题,即更新按钮没有读取我gridview文本框中的新值,而是读取了旧值。页面没有刷新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(); 
    } 

而与此也得到了新的价值,但不再刷新:

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

您从数据绑定代码时,它的初始加载为你的国家,如果它不是一个回发只执行。 – AssaultingCuccos

+0

为什么在回发中调用'LoadData'?你应该把它放在'!PostBack'检查中。通常情况下:启用ViewState时(默认),不要从'Page_Load'回发数据。 –

+0

什么是您的LoadData做..也如果它不是一个PostBack当然它会工作..所以你需要添加逻辑,将加载,无论它是否是postaback或不写或逻辑,将检查如果IsPostBack,并存储如果需要,你需要显示什么LoadData();方法看起来像 – MethodMan

回答

0

行更新方法,更新值在数据库中,然后执行数据源以及数据绑定方法。

例子: -

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 [email protected],[email protected] 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();