<asp:formview ID="Formview1" runat="server" AllowPaging="True"
onpageindexchanging="Formview1_PageIndexChanging"
onprerender="Formview1_PreRender" onitemdeleting="Formview1_ItemDeleting"
DataKeyNames="GoodsID">
<ItemTemplate>
<b><%# Eval("GoodsID")%>:<%# Eval("GoodsName")%></b><small><%# Eval("GoodsIntroduce")%><br/><%# Eval("GoodsPrice")%><br/><br />
<asp:Button ID="Delete" runat="server" Text="删除" CommandName="Delete" />
</small>
</ItemTemplate>
<PagerSettings FirstPageText="首页" LastPageText="尾页"
Mode="NextPreviousFirstLast" NextPageText="下一页" PreviousPageText="上一页" />
</asp:formview>
string ConnectionString = WebConfigurationManager.ConnectionStrings["db_04"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
public void bind()
{
string sqlstr = "select * from tb_GoodsInfo";
SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, sqlcon);
DataSet ds = new DataSet();
sqlcon.Open();
adapter.Fill(ds, "tb_GoodsInfo");
Formview1.DataSource = ds;
Formview1.DataBind();
sqlcon.Close();
}
protected void Formview1_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
Formview1.PageIndex = e.NewPageIndex;
bind();
}
protected void Formview1_ItemDeleting(object sender, FormViewDeleteEventArgs e)
{
foreach (var item in e.Keys)
{
Response.Write(item.ToString()+"<br/>");
}
bind();
}
1、不按分页按钮,点击删除按钮后可获取key
2、按分页按钮后,点击删除按钮第1次获取不到key,点击第2次才能获取key
不知道自己是否少设置了什么,请有经验的帮我看看,谢谢!
没怎么用过这个控件。。你的删除代码没看见你可以在itemtemplate里放个隐藏的Labellabel中放入IDFormview1_ItemDeleting事件中Label lblID = (Label)this.FormView1.FindControl("Label的ID");然后再进行删除操作
<asp:formview ID="Formview1" runat="server" AllowPaging="True"
onpageindexchanging="Formview1_PageIndexChanging"
onitemdeleting="Formview1_ItemDeleting"
oniteminserting="Formview1_ItemInserting"
onitemupdating="Formview1_ItemUpdating"
onmodechanging="Formview1_ModeChanging"
onitemdeleted="Formview1_ItemDeleted" DataKeyNames="GoodsID">
<HeaderTemplate>
信息:
</HeaderTemplate>
<ItemTemplate>
<b><%# Eval("GoodsID")%>:<%# Eval("GoodsName")%></b><small><%# Eval("GoodsIntroduce")%><br/><%# Eval("GoodsPrice")%><br/><br /><asp:Button ID="New" runat="server" Text="新建" CommandName="New" />
<asp:Button ID="Edit" runat="server" Text="编辑" CommandName="Edit" />
<asp:Button ID="Delete" runat="server" Text="删除" CommandName="Delete" />
</small>
</ItemTemplate>
<InsertItemTemplate>
名称:<asp:TextBox ID="GoodsName" runat="server" Text="" /><br/>
类型:<asp:TextBox ID="GoodsIntroduce" runat="server" Text="" /><br/>
价格:<asp:TextBox ID="GoodsPrice" runat="server" Text="" />
<br/>
<asp:Button ID="Insert" runat="server" Text="添加" CommandName="Insert" />
<asp:Button ID="Cancel" runat="server" Text="取消" CommandName="Cancel" />
</InsertItemTemplate>
<EditItemTemplate>
<%# Eval("GoodsID")%>:<br/>
<asp:TextBox ID="GoodsName" runat="server" Text='<%# Bind("GoodsName") %>' />
<br />
<asp:TextBox ID="GoodsIntroduce" runat="server"
Text='<%# Bind("GoodsIntroduce") %>' />
<br />
<asp:TextBox ID="GoodsPrice" runat="server" Text='<%# Bind("GoodsPrice") %>' />
<br />
<br />
<asp:Button ID="Update" runat="server" Text="更新" CommandName="Update" />
<asp:Button ID="Cancel" runat="server" Text="取消" CommandName="Cancel" />
</EditItemTemplate>
<PagerSettings FirstPageText="首页" LastPageText="尾页"
Mode="NextPreviousFirstLast" NextPageText="下一页" PreviousPageText="上一页" />
</asp:formview> string ConnectionString = WebConfigurationManager.ConnectionStrings["db_04"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
public void bind()
{
string sqlstr = "select * from tb_GoodsInfo";
SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, sqlcon);
DataSet ds = new DataSet();
sqlcon.Open();
adapter.Fill(ds, "tb_GoodsInfo");
Formview1.DataSource = ds;
Formview1.DataBind();
sqlcon.Close();
} protected void Formview1_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
Formview1.PageIndex = e.NewPageIndex;
bind();
} protected void Formview1_PreRender(object sender, EventArgs e)
{
} protected void Formview1_ModeChanging(object sender, FormViewModeEventArgs e)
{
Formview1.ChangeMode(e.NewMode);
bind();
} protected void Formview1_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
Int64 id = (Int64)e.Keys["GoodsID"];
string sqlstr = "update tb_GoodsInfo set"
+ " GoodsName = '" + ((TextBox)(Formview1.Row.FindControl("GoodsName"))).Text.ToString().Trim() + "',"
+ " GoodsIntroduce = ' " + ((TextBox)(Formview1.Row.FindControl("GoodsIntroduce"))).Text.ToString().Trim() + "',"
+ " GoodsPrice = " + ((TextBox)(Formview1.Row.FindControl("GoodsPrice"))).Text.ToString().Trim()
+ " where GoodsID = " + id; SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close(); Formview1.ChangeMode(FormViewMode.ReadOnly);
bind(); } protected void Formview1_ItemInserting(object sender, FormViewInsertEventArgs e)
{
string GoodsName = ((TextBox)Formview1.Row.FindControl("GoodsName")).Text.ToString();
string GoodsIntroduce = ((TextBox)Formview1.Row.FindControl("GoodsIntroduce")).Text.ToString();
string GoodsPrice = ((TextBox)Formview1.Row.FindControl("GoodsPrice")).Text.ToString(); string sqlstr = String.Format("insert into tb_GoodsInfo(GoodsName,GoodsIntroduce,GoodsPrice)values('{0}','{1}',{2})", GoodsName, GoodsIntroduce, GoodsPrice); SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
Formview1.ChangeMode(FormViewMode.ReadOnly);
bind();
} protected void Formview1_ItemDeleting(object sender, FormViewDeleteEventArgs e)
{
//String keyValue = e.Keys["EmployeeID"].ToString(); foreach (var item in e.Keys)
{
Response.Write(item.ToString()+"<br/>");
}
//Int64 id = (Int64)e.Keys["GoodsID"];
//string sqlstr = "delete from tb_GoodsInfo where GoodsID = " + id;
//SqlConnection sqlcon = new SqlConnection(ConnectionString);
//SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
//sqlcon.Open();
//sqlcom.ExecuteNonQuery();
//sqlcon.Close(); //Formview1.ChangeMode(FormViewMode.ReadOnly);
bind();
}
string ConnectionString = WebConfigurationManager.ConnectionStrings["db_04"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
public void bind()
{
string sqlstr = "select * from tb_GoodsInfo";
SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, sqlcon);
DataSet ds = new DataSet();
sqlcon.Open();
adapter.Fill(ds, "tb_GoodsInfo");
Formview1.DataSource = ds;
Formview1.DataBind();
sqlcon.Close();
} protected void Formview1_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
Formview1.PageIndex = e.NewPageIndex;
bind();
} protected void Formview1_ModeChanging(object sender, FormViewModeEventArgs e)
{
Formview1.ChangeMode(e.NewMode);
bind();
} protected void Formview1_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
Int64 id = (Int64)e.Keys["GoodsID"];
string sqlstr = "update tb_GoodsInfo set"
+ " GoodsName = '" + ((TextBox)(Formview1.Row.FindControl("GoodsName"))).Text.ToString().Trim() + "',"
+ " GoodsIntroduce = ' " + ((TextBox)(Formview1.Row.FindControl("GoodsIntroduce"))).Text.ToString().Trim() + "',"
+ " GoodsPrice = " + ((TextBox)(Formview1.Row.FindControl("GoodsPrice"))).Text.ToString().Trim()
+ " where GoodsID = " + id; SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close(); Formview1.ChangeMode(FormViewMode.ReadOnly);
bind(); } protected void Formview1_ItemInserting(object sender, FormViewInsertEventArgs e)
{
string GoodsName = ((TextBox)Formview1.Row.FindControl("GoodsName")).Text.ToString();
string GoodsIntroduce = ((TextBox)Formview1.Row.FindControl("GoodsIntroduce")).Text.ToString();
string GoodsPrice = ((TextBox)Formview1.Row.FindControl("GoodsPrice")).Text.ToString(); string sqlstr = String.Format("insert into tb_GoodsInfo(GoodsName,GoodsIntroduce,GoodsPrice)values('{0}','{1}',{2})", GoodsName, GoodsIntroduce, GoodsPrice); SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
Formview1.ChangeMode(FormViewMode.ReadOnly);
bind();
} protected void Formview1_ItemDeleting(object sender, FormViewDeleteEventArgs e)
{
//String keyValue = e.Keys["EmployeeID"].ToString(); foreach (var item in e.Keys)
{
Response.Write(item.ToString()+"<br/>");
}
//Int64 id = (Int64)e.Keys["GoodsID"];
//string sqlstr = "delete from tb_GoodsInfo where GoodsID = " + id;
//SqlConnection sqlcon = new SqlConnection(ConnectionString);
//SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
//sqlcon.Open();
//sqlcom.ExecuteNonQuery();
//sqlcon.Close(); //Formview1.ChangeMode(FormViewMode.ReadOnly);
bind();
}
<asp:formview ID="Formview1" runat="server" AllowPaging="True"
onpageindexchanging="Formview1_PageIndexChanging"
onitemdeleting="Formview1_ItemDeleting"
oniteminserting="Formview1_ItemInserting"
onitemupdating="Formview1_ItemUpdating"
onmodechanging="Formview1_ModeChanging"
DataKeyNames="GoodsID">
<HeaderTemplate>
信息:
</HeaderTemplate>
<ItemTemplate>
<b><%# Eval("GoodsID")%>:<%# Eval("GoodsName")%></b><small><%# Eval("GoodsIntroduce")%><br/><%# Eval("GoodsPrice")%><br/><br /><asp:Button ID="New" runat="server" Text="新建" CommandName="New" />
<asp:Button ID="Edit" runat="server" Text="编辑" CommandName="Edit" />
<asp:Button ID="Delete" runat="server" Text="删除" CommandName="Delete" />
</small>
</ItemTemplate>
<InsertItemTemplate>
名称:<asp:TextBox ID="GoodsName" runat="server" Text="" /><br/>
类型:<asp:TextBox ID="GoodsIntroduce" runat="server" Text="" /><br/>
价格:<asp:TextBox ID="GoodsPrice" runat="server" Text="" />
<br/>
<asp:Button ID="Insert" runat="server" Text="添加" CommandName="Insert" />
<asp:Button ID="Cancel" runat="server" Text="取消" CommandName="Cancel" />
</InsertItemTemplate>
<EditItemTemplate>
<%# Eval("GoodsID")%>:<br/>
<asp:TextBox ID="GoodsName" runat="server" Text='<%# Bind("GoodsName") %>' />
<br />
<asp:TextBox ID="GoodsIntroduce" runat="server"
Text='<%# Bind("GoodsIntroduce") %>' />
<br />
<asp:TextBox ID="GoodsPrice" runat="server" Text='<%# Bind("GoodsPrice") %>' />
<br />
<br />
<asp:Button ID="Update" runat="server" Text="更新" CommandName="Update" />
<asp:Button ID="Cancel" runat="server" Text="取消" CommandName="Cancel" />
</EditItemTemplate>
<PagerSettings FirstPageText="首页" LastPageText="尾页"
Mode="NextPreviousFirstLast" NextPageText="下一页" PreviousPageText="上一页" />
</asp:formview>
{
string sqlstr = "select * from tb_GoodsInfo";
SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, sqlcon);
DataSet ds = new DataSet();
sqlcon.Open();
adapter.Fill(ds, "tb_GoodsInfo");
Formview1.DataSource = ds;
Formview1.DataBind();
sqlcon.Close();
}
=》
public void bind()
{
string sqlstr = "select * from tb_GoodsInfo";
SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, sqlcon);
DataSet ds = new DataSet();
adapter.Fill(ds, "tb_GoodsInfo");
Formview1.DataSource = ds;
Formview1.DataBind();
}
执行后将报 为将对象引用设置到对象的实例,就是说名为GoodsID的Key不存在,你似乎没搞清楚Deleting和Updating事件里面的e.Keys是取自哪里,参考SqlDataSource数据源控件的使用和MSDN的说明,如何你打算还是这样用自定义数据绑定和自定义操作,你可以用隐藏域标识你Update和Delete操作的记录项的ID比如你可以这样:
<asp:FormView ID="Formview1" runat="server" AllowPaging="True" OnPageIndexChanging="Formview1_PageIndexChanging"
OnItemDeleting="Formview1_ItemDeleting" OnItemInserting="Formview1_ItemInserting"
OnItemUpdating="Formview1_ItemUpdating" OnModeChanging="Formview1_ModeChanging"
DataKeyNames="GoodsID">
<HeaderTemplate>
信息:
</HeaderTemplate>
<ItemTemplate>
<asp:HiddenField ID="hfldGoodsID" runat="server" Value='<%# Eval("GoodsID")%>' />
编号:<%# Eval("GoodsID")%>
<br />
名称:<%# Eval("GoodsName")%>
<br />
介绍:<%# Eval("GoodsIntroduce")%>
<br />
价格:<%# Eval("GoodsPrice")%>
<br />
<br />
<asp:Button ID="New" runat="server" Text="新建" CommandName="New" />
<asp:Button ID="Edit" runat="server" Text="编辑" CommandName="Edit" />
<asp:Button ID="Delete" runat="server" Text="删除" CommandName="Delete" />
</ItemTemplate>
<InsertItemTemplate>
名称:<asp:TextBox ID="GoodsName" runat="server" Text="" /><br />
介绍:<asp:TextBox ID="GoodsIntroduce" runat="server" Text="" /><br />
价格:<asp:TextBox ID="GoodsPrice" runat="server" Text="" />
<br />
<asp:Button ID="Insert" runat="server" Text="添加" CommandName="Insert" />
<asp:Button ID="Cancel" runat="server" Text="取消" CommandName="Cancel" />
</InsertItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="GoodsID" runat="server" Text='<%# Bind("GoodsID") %>' Enabled="false" />
<br />
<asp:TextBox ID="GoodsName" runat="server" Text='<%# Bind("GoodsName") %>' />
<br />
<asp:TextBox ID="GoodsIntroduce" runat="server" Text='<%# Bind("GoodsIntroduce") %>' />
<br />
<asp:TextBox ID="GoodsPrice" runat="server" Text='<%# Bind("GoodsPrice") %>' />
<br />
<br />
<asp:Button ID="Update" runat="server" Text="更新" CommandName="Update" />
<asp:Button ID="Cancel" runat="server" Text="取消" CommandName="Cancel" />
</EditItemTemplate>
<PagerSettings FirstPageText="首页" LastPageText="尾页" Mode="NextPreviousFirstLast"
NextPageText="下一页" PreviousPageText="上一页" />
</asp:FormView>protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
public void bind()
{
string sqlstr = "select * from tb_GoodsInfo";
SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, sqlcon);
DataSet ds = new DataSet();
sqlcon.Open();
adapter.Fill(ds, "tb_GoodsInfo");
Formview1.DataSource = ds;
Formview1.DataBind();
sqlcon.Close();
} protected void Formview1_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
Formview1.PageIndex = e.NewPageIndex;
bind();
} protected void Formview1_ModeChanging(object sender, FormViewModeEventArgs e)
{
Formview1.ChangeMode(e.NewMode);
bind();
} protected void Formview1_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
string id = ((TextBox)(Formview1.Row.FindControl("GoodsID"))).Text.Trim();
string sqlstr = "update tb_GoodsInfo set"
+ " GoodsName = '" + ((TextBox)(Formview1.Row.FindControl("GoodsName"))).Text.ToString().Trim() + "',"
+ " GoodsIntroduce = ' " + ((TextBox)(Formview1.Row.FindControl("GoodsIntroduce"))).Text.ToString().Trim() + "',"
+ " GoodsPrice = " + ((TextBox)(Formview1.Row.FindControl("GoodsPrice"))).Text.ToString().Trim()
+ " where GoodsID = " + id; SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close(); Formview1.ChangeMode(FormViewMode.ReadOnly);
bind(); } protected void Formview1_ItemInserting(object sender, FormViewInsertEventArgs e)
{
string GoodsName = ((TextBox)Formview1.Row.FindControl("GoodsName")).Text.ToString();
string GoodsIntroduce = ((TextBox)Formview1.Row.FindControl("GoodsIntroduce")).Text.ToString();
string GoodsPrice = ((TextBox)Formview1.Row.FindControl("GoodsPrice")).Text.ToString(); string sqlstr = String.Format("insert into tb_GoodsInfo(GoodsName,GoodsIntroduce,GoodsPrice)values('{0}','{1}',{2})", GoodsName, GoodsIntroduce, GoodsPrice); SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
Formview1.ChangeMode(FormViewMode.ReadOnly);
bind();
} protected void Formview1_ItemDeleting(object sender, FormViewDeleteEventArgs e)
{
string id = ((HiddenField)(Formview1.Row.FindControl("hfldGoodsID"))).Value.Trim(); string sqlstr = "delete from tb_GoodsInfo where GoodsID = " + id;
SqlConnection sqlcon = new SqlConnection(ConnectionString);
SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
bind();
}
提几点,.Text.ToString().Trim(),这种结构,Text属性返回的已经是string类型,你干嘛还要ToString()还有,数据库相关操作,你提取出来,放到一个类中(如SQLHelper.cs),这样代码会比较清爽,提高复用