如何添加新的数据库行,然后使用GridView控件进行编辑?

时间:2009-03-10 05:04:48

标签: .net gridview

在我的应用程序中,我正在使用网格视图控件。

我正在使用以下代码在网格视图控件中创建一个新的空行:

string co = ConfigurationSettings.AppSettings["MyLogin"];
            SqlConnection connection = new SqlConnection(co);
            connection.Open();                
string sql = "insert into TeamMember_table "
          + "values('','','','','','','','','','','','')";                
SqlDataAdapter dp = new SqlDataAdapter(sql, connection);                
DataSet ds = new DataSet();                
dp.Fill(ds);                
gridview1.DataBind();               
connection.Close();

空行已成功添加,但我的问题是我想在此空行中输入值,并在单击我的保存按钮时将此值保存到表中。

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

SqlDataAdapter的第一个参数是要使用的SELECT语句;你的代码每次查询数据时都会添加一个新的数据库行(听起来非常非常错误),而且我预计由于INSERT vs {{1}的混淆,查询本身不会真正起作用}。

你应该真的只是从SELECTSELECT,然后或许之后在 local 数据表中添加一行:

TeamMember_table

就个人而言,我不会添加假行,除非它对绑定绝对必要;我不能就此提出建议,我担心......但是你需要小心不要意外地添加空行。也许检查回发后(假设是ASP.NET),只有在它有一些有用的东西时才保存。

答案 1 :(得分:0)

您可能希望使用RowDataBound和RowData Delete等事件来实现这些行为。例如:

protected void Page_Load(object sender, EventArgs e) {
    GridView1.RowDataBound += GridView1_RowDataBound;
    GridView1.RowUpdated += GridView1_RowUpdated;
    if (!IsPostBack) {
        string co = ConfigurationManager.ConnectionStrings["MyConnectionString"];
        using (SqlConnection connection = new SqlConnection(co)) {
            connection.Open();
            string sql = "select ....";
            SqlDataAdapter dp = new SqlDataAdapter(sql, connection);
            DataSet ds = new DataSet();
            dp.Fill(ds);

            GridView1.DataSource = ds.Tables["MyTable"];
            GridView1.DataKeyNames = new string[] { "Id" };
            GridView1.DataBind();
        }                
    }
}

void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e) {
    throw new NotImplementedException();
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
    if (e.Row.RowType == DataControlRowType.DataRow) {
        Label l = (Label)e.Row.FindControl("Label1");
        l.Text = "some text value";
    }
}