原帖在这里,(http://bbs.csdn.net/topics/390275032?page=1#post-392864180)不过可以不去看了,我在这贴里重复一遍吧:关于GridView删除、编辑功能的代码实现。
页面上有GridView1和GridView2,都指向同一数据源中的Save表,表中有ID,Name,Time,Ex4列,其中ID列设置为不显示。
GridView1在页面显示,Gridview2用作查询功能,最开始不显示,点击Button2后根据TextBox中的内容显示查询到的信息。GridView1一切功能正常,主要问题是GridView2上。以下是部分代码:
protected void Button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\test.mdf;Integrated Security=True;User Instance=True");
conn.Open();
string sql1 = "select Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'"; //点击按钮后显示GridView2,列出查询的信息
SqlCommand cmd1 = new SqlCommand(sql1, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd1);
DataSet ds = new DataSet();
da.Fill(ds);
GridView2.DataSource = ds;
GridView2.DataBind();
}
GridView2查询功能正常,现在我想在GridView2上增加编辑、删除功能按钮。GridView1是通过向导绑定的数据源,使用的是其自带的删除、编辑功能。GridView2用代码如何实现删除、编辑功能。查了下资料,自己改了改,如下:我是直接通过编辑列-》添加CommandField->添加删除、编辑按钮。然后添加了RowEditing、RowUpdating、RowCancelingEdit、RowDeleting四个事件,代码如下:
...
SqlConnection sqlcon;
SqlCommand sqlcom;
string strCon=@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\test.mdf;Integrated Security=True;User Instance=True"; //连接字符串
...
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
bind();
}
}
protected void Button2_Click(object sender, EventArgs e) //点击按钮实现查询TextBox中的内容,显示到GridView2中
{
SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\test.mdf;Integrated Security=True;User Instance=True");
conn.Open();
string sql1 = "select Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'";
SqlCommand cmd1 = new SqlCommand(sql1, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd1);
DataSet ds = new DataSet();
da.Fill(ds);
GridView2.DataSource = ds;
GridView2.DataBind();
}
protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e) //删除功能
{
string sqlstr="delete from [Save] where ID='" + GridView2.DataKeys[e.RowIndex].Value.ToString() + "'";
sqlcon = new SqlConnection(strCon);
sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
bind();
}
protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
{
this.GridView2.EditIndex = e.NewEditIndex;
bind();
}
protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
sqlcon = new SqlConnection(strCon);
string sqlstr = "update [Save] set Names='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',Time='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "',Ex='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where ID='"
+ GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";
sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
GridView1.EditIndex = -1;
bind();
}
protected void GridView2_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView2.EditIndex = -1;
bind();
}
public void bind()
{
string sqlstr = "select Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'";
sqlcon = new SqlConnection(strCon);
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet();
sqlcon.Open();
myda.Fill(myds, "Save");
GridView2.DataSource = myds;
GridView2.DataKeyNames = new string[] { "ID" };
}
现在运行有以下几个问题:
1.本来Save表中有4列:ID,Name,Time,Ex。我只想显示后三列,且ID列设为主键。
代码为:string sql1 = "select Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'";
但是运行后,Button2_Click事件中的GridView2.DataBind()这句在点击查询按钮后提示这句有误:
“DataBinding:“System.Data.DataRowView”不包含名为“ID”的属性”。
于是我把string sql1 = "select Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'";
改为:
string sql1 = "select ID as ID,Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'"; 加上了ID列,运行不报错了,但是出现了问题2;
问题2:
点击编辑或者删除按钮后GridView2无反应,再次点击某一按钮后出现第一次点击的效果,感觉像是没有刷新一样。是否是数据绑定问题?但是我每个事件后面都添加了bind()函数。
问题3:同问题1,怎么修改下可以使ID列隐藏而不报错? 问题有点长,求教!
页面上有GridView1和GridView2,都指向同一数据源中的Save表,表中有ID,Name,Time,Ex4列,其中ID列设置为不显示。
GridView1在页面显示,Gridview2用作查询功能,最开始不显示,点击Button2后根据TextBox中的内容显示查询到的信息。GridView1一切功能正常,主要问题是GridView2上。以下是部分代码:
protected void Button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\test.mdf;Integrated Security=True;User Instance=True");
conn.Open();
string sql1 = "select Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'"; //点击按钮后显示GridView2,列出查询的信息
SqlCommand cmd1 = new SqlCommand(sql1, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd1);
DataSet ds = new DataSet();
da.Fill(ds);
GridView2.DataSource = ds;
GridView2.DataBind();
}
GridView2查询功能正常,现在我想在GridView2上增加编辑、删除功能按钮。GridView1是通过向导绑定的数据源,使用的是其自带的删除、编辑功能。GridView2用代码如何实现删除、编辑功能。查了下资料,自己改了改,如下:我是直接通过编辑列-》添加CommandField->添加删除、编辑按钮。然后添加了RowEditing、RowUpdating、RowCancelingEdit、RowDeleting四个事件,代码如下:
...
SqlConnection sqlcon;
SqlCommand sqlcom;
string strCon=@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\test.mdf;Integrated Security=True;User Instance=True"; //连接字符串
...
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
bind();
}
}
protected void Button2_Click(object sender, EventArgs e) //点击按钮实现查询TextBox中的内容,显示到GridView2中
{
SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\test.mdf;Integrated Security=True;User Instance=True");
conn.Open();
string sql1 = "select Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'";
SqlCommand cmd1 = new SqlCommand(sql1, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd1);
DataSet ds = new DataSet();
da.Fill(ds);
GridView2.DataSource = ds;
GridView2.DataBind();
}
protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e) //删除功能
{
string sqlstr="delete from [Save] where ID='" + GridView2.DataKeys[e.RowIndex].Value.ToString() + "'";
sqlcon = new SqlConnection(strCon);
sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
bind();
}
protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
{
this.GridView2.EditIndex = e.NewEditIndex;
bind();
}
protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
sqlcon = new SqlConnection(strCon);
string sqlstr = "update [Save] set Names='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',Time='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "',Ex='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where ID='"
+ GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";
sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
GridView1.EditIndex = -1;
bind();
}
protected void GridView2_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView2.EditIndex = -1;
bind();
}
public void bind()
{
string sqlstr = "select Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'";
sqlcon = new SqlConnection(strCon);
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet();
sqlcon.Open();
myda.Fill(myds, "Save");
GridView2.DataSource = myds;
GridView2.DataKeyNames = new string[] { "ID" };
}
现在运行有以下几个问题:
1.本来Save表中有4列:ID,Name,Time,Ex。我只想显示后三列,且ID列设为主键。
代码为:string sql1 = "select Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'";
但是运行后,Button2_Click事件中的GridView2.DataBind()这句在点击查询按钮后提示这句有误:
“DataBinding:“System.Data.DataRowView”不包含名为“ID”的属性”。
于是我把string sql1 = "select Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'";
改为:
string sql1 = "select ID as ID,Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'"; 加上了ID列,运行不报错了,但是出现了问题2;
问题2:
点击编辑或者删除按钮后GridView2无反应,再次点击某一按钮后出现第一次点击的效果,感觉像是没有刷新一样。是否是数据绑定问题?但是我每个事件后面都添加了bind()函数。
问题3:同问题1,怎么修改下可以使ID列隐藏而不报错? 问题有点长,求教!
出错行在 string sqlstr = "update [Save] set Names='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',Time='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "',Ex='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where ID='"
+ GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";
设置ID列的只读属性为只读,可见visible属性为false。