2011-12-09 119 views
2

我有一个数据网格显示来自SQL表的一些信息,然后是一个简单的文本框和按钮,以允许用户添加记录到数据库。问题是,当用户点击添加,数据网格应该更新,但它不,有任何想法?代码有问题如下:Datagrid刷新不工作

protected void Page_Load(object sender, EventArgs e) 
    { 
     username.Text = Session["username"].ToString(); 
     datetime.Text = DateTime.Now.ToString(); 

     BindData(); 
    } 

protected void BindData() 
    { 
     string SQLQuery = "SELECT * From Filters"; 

     OleDbConnection MyConn = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString); 

     DataSet resultsDataSet = new DataSet(); 
     MyConn.Open(); 

     OleDbDataAdapter DataAdapter = new OleDbDataAdapter(SQLQuery, MyConn); 
     DataAdapter.Fill(resultsDataSet); 
     DGFilters.DataSource = resultsDataSet; 
     DGFilters.DataBind(); 

     if (resultsDataSet.Tables[0].Rows.Count == 0) 
     { 
      no_records.Visible = true; 
      DGFilters.Visible = false; 
     } 
     else 
     { 
      DGFilters.Visible = true; 
      no_records.Visible = false; 
     } 

     MyConn.Close(); 
    } 

    protected void AddFilter_Click(object sender, EventArgs e) 
    { 
     OleDbConnection MyConn = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString); 

     MyConn.Open(); 

     string SQLInsert = "INSERT INTO Filters (FilterString) VALUES ('" + FilterToAdd.Text + "')"; 

     OleDbCommand MyCmd = new OleDbCommand(SQLInsert, MyConn); 

     MyCmd.ExecuteNonQuery(); 

     MyConn.Close(); 

     DataBind(); 

    } 

任何想法?

回答

2

在您的AddFilter_Click方法的底部,您需要调用您自己的BindData(),以便网格可以刷新新记录。现在你打电话给DataBind(),这是基类Control上的一个方法,它被应用到你的整个Web表单上。我猜这不是什么大事。

而且,在你的Page_Load方法,你或许可以改变这一点:

BindData(); 

if (!Page.IsPostBack) 
    BindData(); 

,这样你就不能结合您的网格两次当用户点击“添加'按钮。

+0

cor blimey guvnor。多数民众赞成什么时发生,当你试图编码时,累了。 BindData!= DataBind。 D'哦!!!! –

+0

@Jonathan - uta spotta红牛oughtta修复:) –

+0

此外 - 看起来像这个答案让我超过100个asp.net徽章upvotes - 所以谢谢: - P –