我做了一个gridview和detailview的绑定,当我第一次点击gridview的选择时,正常弹出detailview的编辑框,但更新后再点击gridview时,就直接弹出detailview编辑框的下一个框。为什么??
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
DetailsView1.Visible = true;
SqlConnection sqlcon = new SqlConnection();
sqlcon.ConnectionString = "data source=90D57B80B843459;database=Equipment;uid=sa;pwd=;";
sqlcon.Open();
string ID号 = GridView1.DataKeys[GridView1.SelectedIndex].Values[0].ToString();
string sqlstr = "select ID号,设备名称,型号,编号,配属单位,运用区段,上线运用日期,设备厂家,状态 from [liewei1] where ID号=" + ID号;
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet(); myda.Fill(myds);
DetailsView1.DataSource = myds;
DetailsView1.DataBind();
//GridView1.DataBind();
sqlcon.Close();
this.Page_Load(sender, e); }
protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{ string 设备名称;
string 型号;
string 编号;
string 运用区段;
string SqlUpdate; 设备名称 = ((TextBox)DetailsView1.Rows[1].Cells[1].Controls[0]).Text.Trim();
//tb = (TextBox)(DetailsView1.Rows[5].Cells[1].FindControl("TextBox5"));
型号 = ((TextBox)DetailsView1.Rows[2].Cells[1].Controls[0]).Text;
//tb = (TextBox)(DetailsView1.Rows[1].Cells[1].FindControl("TextBox1"));
编号 = ((TextBox)DetailsView1.Rows[3].Cells[1].Controls[0]).Text;
//tb = (TextBox)(DetailsView1.Rows[6].Cells[1].FindControl("TextBox6"));
运用区段 = ((TextBox)DetailsView1.Rows[5].Cells[1].Controls[0]).Text.Trim();
string 上线运用日期 = ((TextBox)DetailsView1.Rows[6].Cells[1].Controls[0]).Text.Trim();
string 配属单位 = ((TextBox)DetailsView1.Rows[4].Cells[1].Controls[0]).Text.Trim();
string 设备厂家 = ((TextBox)DetailsView1.Rows[7].Cells[1].Controls[0]).Text.Trim();
string 状态 = ((TextBox)DetailsView1.Rows[8].Cells[1].Controls[0]).Text.Trim(); string ID号 = GridView1.DataKeys[GridView1.SelectedIndex].Values[0].ToString();
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "data source=90D57B80B843459;database=Equipment;uid=sa;pwd=;";
SqlUpdate = "update [liewei1] set 设备名称 = '" + 设备名称.Trim() + "',型号 = '" + 型号 + "', 编号 = '" + 编号 + "',配属单位 = '" + 配属单位 + "',运用区段 = '" + 运用区段 + "',上线运用日期='" + 上线运用日期 + "',设备厂家 = '" + 设备厂家 + "',状态 = '" + 状态 + "'where ID号=" + ID号; //con.Open();
//SqlCommand cmd = new SqlCommand(SqlUpdate, con);
//cmd.ExecuteNonQuery(); //con.Close();
//try
//{ if (conn.State.ToString() == "Closed")
conn.Open();
SqlCommand comm = new SqlCommand(SqlUpdate, conn);
comm.ExecuteNonQuery(); if (conn.State.ToString() == "Open")
conn.Close();
Detailsbind();
DetailsView1.DataBind();
BindGridView();
DetailsView1.Visible = false;
//}
//catch (Exception ex)
//{
// Response.Write("数据库错误,错误原因:" + ex.Message);
// Response.End();
//} }
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
DetailsView1.Visible = true;
SqlConnection sqlcon = new SqlConnection();
sqlcon.ConnectionString = "data source=90D57B80B843459;database=Equipment;uid=sa;pwd=;";
sqlcon.Open();
string ID号 = GridView1.DataKeys[GridView1.SelectedIndex].Values[0].ToString();
string sqlstr = "select ID号,设备名称,型号,编号,配属单位,运用区段,上线运用日期,设备厂家,状态 from [liewei1] where ID号=" + ID号;
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet(); myda.Fill(myds);
DetailsView1.DataSource = myds;
DetailsView1.DataBind();
//GridView1.DataBind();
sqlcon.Close();
this.Page_Load(sender, e); }
protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{ string 设备名称;
string 型号;
string 编号;
string 运用区段;
string SqlUpdate; 设备名称 = ((TextBox)DetailsView1.Rows[1].Cells[1].Controls[0]).Text.Trim();
//tb = (TextBox)(DetailsView1.Rows[5].Cells[1].FindControl("TextBox5"));
型号 = ((TextBox)DetailsView1.Rows[2].Cells[1].Controls[0]).Text;
//tb = (TextBox)(DetailsView1.Rows[1].Cells[1].FindControl("TextBox1"));
编号 = ((TextBox)DetailsView1.Rows[3].Cells[1].Controls[0]).Text;
//tb = (TextBox)(DetailsView1.Rows[6].Cells[1].FindControl("TextBox6"));
运用区段 = ((TextBox)DetailsView1.Rows[5].Cells[1].Controls[0]).Text.Trim();
string 上线运用日期 = ((TextBox)DetailsView1.Rows[6].Cells[1].Controls[0]).Text.Trim();
string 配属单位 = ((TextBox)DetailsView1.Rows[4].Cells[1].Controls[0]).Text.Trim();
string 设备厂家 = ((TextBox)DetailsView1.Rows[7].Cells[1].Controls[0]).Text.Trim();
string 状态 = ((TextBox)DetailsView1.Rows[8].Cells[1].Controls[0]).Text.Trim(); string ID号 = GridView1.DataKeys[GridView1.SelectedIndex].Values[0].ToString();
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "data source=90D57B80B843459;database=Equipment;uid=sa;pwd=;";
SqlUpdate = "update [liewei1] set 设备名称 = '" + 设备名称.Trim() + "',型号 = '" + 型号 + "', 编号 = '" + 编号 + "',配属单位 = '" + 配属单位 + "',运用区段 = '" + 运用区段 + "',上线运用日期='" + 上线运用日期 + "',设备厂家 = '" + 设备厂家 + "',状态 = '" + 状态 + "'where ID号=" + ID号; //con.Open();
//SqlCommand cmd = new SqlCommand(SqlUpdate, con);
//cmd.ExecuteNonQuery(); //con.Close();
//try
//{ if (conn.State.ToString() == "Closed")
conn.Open();
SqlCommand comm = new SqlCommand(SqlUpdate, conn);
comm.ExecuteNonQuery(); if (conn.State.ToString() == "Open")
conn.Close();
Detailsbind();
DetailsView1.DataBind();
BindGridView();
DetailsView1.Visible = false;
//}
//catch (Exception ex)
//{
// Response.Write("数据库错误,错误原因:" + ex.Message);
// Response.End();
//} }
1.
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
//sqlcon.Open();
//sqlcon.Close();
这两个都去掉吧. SqlDataAdapter会在必要时给你自动打开和关闭连接. 凡是DataAdapter在的地方, 不用显示的开关连接.}
2.
GridView1_SelectedIndexChanged()里调用this.Page_Load(sender, e); 让人感觉莫名其妙. 我实在想不出有什么理由手动执行Page_Load(), 我从来没见过在一个方法里调用Page_Load()这种事情.
如果你有什么理由的话,那我敢100%告诉你, 你肯定想错了!
3.
我个人反正是相当讨厌DetailsView1.Rows[5].Cells[1].FindControl类似这样从控件的"皮肤"上刮下数据的操作. 这应该有别的替代方法.
4.
最主要的,我觉得代码很乱, 到处绑定, 这个肯定也错了.呵呵, 别在意哦~
GRIDVIEW编辑模式取消
{
...
DetailsView1.CurrentMode = DetailsViewMode.ReadOnly;
}
{
this.DetailsView1.PageIndex = this.GridView1.SelectedRow.DataItemIndex;
this.DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
BindDetails();
}
protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
//修改数据
this.DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
//重新绑定GridView和DetailsView数据
BindData();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
BindGridView();
}
protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)
{
if (e.NewMode == DetailsViewMode.Edit)
{
DetailsView1.ChangeMode(DetailsViewMode.Edit);
}
if (e.NewMode == DetailsViewMode.Insert)
{
DetailsView1.ChangeMode(DetailsViewMode.Insert);
}
if (e.NewMode == DetailsViewMode.ReadOnly)
{
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
}
BindDetails();
}