在我的应用程序中,我正在使用网格视图控件。
我正在使用以下代码在网格视图控件中创建一个新的空行:
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();
空行已成功添加,但我的问题是我想在此空行中输入值,并在单击我的保存按钮时将此值保存到表中。
这样做的最佳方式是什么?
答案 0 :(得分:1)
SqlDataAdapter
的第一个参数是要使用的SELECT
语句;你的代码每次查询数据时都会添加一个新的数据库行(听起来非常非常错误),而且我预计由于INSERT
vs {{1}的混淆,查询本身不会真正起作用}。
你应该真的只是从SELECT
做SELECT
,然后或许之后在 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";
}
}