我有一个datagrid来显示SQL表中的一些信息,然后是一个简单的文本框和按钮,允许用户将记录添加到数据库中。问题是,当用户点击添加时,数据网格应该更新,但它没有任何想法?有问题的代码如下:
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();
}
有什么想法吗?
答案 0 :(得分:2)
在AddFilter_Click
方法的底部,您需要调用自己的BindData()
,以便可以使用新记录刷新网格。现在你正在调用DataBind()
,它是基类Control上的一个方法,它正在应用于整个Web表单。我猜这不会做太多事情。
此外,在Page_Load方法中,您可以更改此内容:
BindData();
到
if (!Page.IsPostBack)
BindData();
这样当用户点击“添加”按钮时,您就不会将网格绑定两次。