好久都没有写写技术博客了,自己最近几个月都要忙着搬家还有添置家当,所以一些博客就很少去写了,天道酬勤,有些吃饭的家伙还是不能有所懈怠,所以送上一个花了几小时给人事同事写的简单办公用品表的CRUD,希望对正在这条编程这条路上的童鞋们能有所帮助。

  • 1、分析需求。

当我们拿到一个需求或者一个BUG的时候,并不是尽快把自己的十八般武艺全施展出来,或者赶紧动手做,这样后期补漏洞的可能性是大大的,因为你根本没明白自己在做什么,该怎么做,和预防措施。那我们应该怎么做呢?

分析需求是很重要的第一步,这个也是我一直教导我徒儿,虽然她不编程,但是每一行的道理是一样的,无论开发也好,实施也好,最重要就是我们开始分析需求,人事同事需要一个办公用品表来进行增删改查,可能这样是很简单的基础操作,但是既然是分析,也要考虑后期的后果。

这个使用者的控制,咱们没看到一个表的增删改查就觉得这简单啊,但是当这个使用者是所有人,你能保证数据准确性?

还有整个表可能在当前没有很重要,但是咱们的办公用品表对于企业来说是一个重要的一环,后面也会配合ERP和财务的用友软件核算,如果一张办公用品表所有人都能进行篡改,那么只能说你们公司的数据库就是公共资源了,所以我们要和人事同事协商这个使用者,必须是哪几个人,这样责任划分就十分清楚了,当然不能提供批量操作,因为批量后台实现的确特别方便不就是数组么,但是对于数据的安全性而已,这是很大的漏洞,你们可以看看各大型的网站项目,有提供批量操作么?是他们技术不够?

那是不可能的,各大型网站的公司必有大牛坐镇,那么都是就安全性考虑,越严谨的逻辑,操作往往会比较复杂,因为不能简单三步点击完事吧,这样被攻击的可能性就一步就能直接侵入你们公司看似机密的机密数据库了。

  • 2、实现需求。

接下来就是众多想要看到高潮了,如何实现需求,第一点,分析需求解决了所有限制和后续麻烦,接下来我们就在这些限制里面实现这些,这才是做对的事情。我用的是ASP+三层实现:

三层分为:Model层(存储映射数据库表)、DAL层(数据访问)、BLL层(业务逻辑实现)

详细解释三层,请百度关键字ASP三层,会有详细解释三层的含义,这是基础需要学习的童鞋要自己去百度了解。

数据库表Office_Supplies展示出来:

第一咱们先把网站项目新建好,选择网站项目命名为Crud,其次在解决方案中去新建新项选择类库:

Model类库中新建Office_Supplies类,如下:

[Serializable]
public class Office_Supplies
{
int _SuppliesID;
string _Oneclass;
string _Twoclass;
string _Threeclass;
string _Fourclass;
string _Unit;
float _Unitprice;
int _Store;
int _State; public int SuppliesID
{
get { return _SuppliesID; }
set { _SuppliesID = value; }
} /// <summary>
/// 一类
/// </summary>
public string Oneclass
{
get { return _Oneclass; }
set { _Oneclass = value; }
} /// <summary>
/// 二类
/// </summary>
public string Twoclass
{
get { return _Twoclass; }
set { _Twoclass = value; }
} /// <summary>
/// 三类
/// </summary>
public string Threeclass
{
get { return _Threeclass; }
set { _Threeclass = value; }
} /// <summary>
/// 四类
/// </summary>
public string Fourclass
{
get { return _Fourclass; }
set { _Fourclass = value; }
} /// <summary>
/// 单位
/// </summary>
public string Unit
{
get { return _Unit; }
set { _Unit = value; }
} /// <summary>
/// 单价
/// </summary>
public float Unitprice
{
get { return _Unitprice; }
set { _Unitprice = value; }
} /// <summary>
/// 库存
/// </summary>
public int Store
{
get { return _Store; }
set { _Store = value; }
} /// <summary>
/// 状态
/// </summary>
public int State
{
get { return _State; }
set { _State = value; }
}
}

DAL类库中新建Office_SuppliesService类,如下:

public class Office_SuppliesService
{
/// <summary>
/// 新增
/// </summary>
/// <param name="supplies"></param>
/// <returns></returns>
public static bool Add(Office_Supplies supplies)
{
string sql = string.Format("INSERT INTO dbo.Office_Supplies (一类, 二类, 三类, 四类, 单位, 单价, 库存, 状态) VALUES('" + supplies.Oneclass + "','" + supplies.Twoclass + "','" +
supplies.Threeclass + "','" + supplies.Fourclass + "','" + supplies.Unit + "'," + supplies.Unitprice + "," + supplies.Store + "," + supplies.State + ")");
return DBHelper.ExcuteSQL(sql) > ? true : false;
} /// <summary>
/// 删除
/// </summary>
/// <param name="SuppliesID"></param>
/// <returns></returns>
public static bool Delete(int SuppliesID)
{
string sql = string.Format("DELETE FROM dbo.Office_Supplies WHERE SuppliesID=" + SuppliesID + "");
return DBHelper.ExcuteSQL(sql) > ? true : false;
} /// <summary>
/// 修改
/// </summary>
/// <param name="supplies"></param>
/// <returns></returns>
public static bool Modify(Office_Supplies supplies)
{
string sql = string.Format("UPDATE dbo.Office_Supplies SET 一类='" + supplies.Oneclass + "',二类='" + supplies.Twoclass + "',三类='" + supplies.Threeclass + "',四类='" + supplies.Fourclass +
"',单位='" + supplies.Unit + "',单价=" + supplies.Unitprice + ",库存=" + supplies.Store + ",状态=" + supplies.State + " where SuppliesID=" + supplies.SuppliesID + "");
return DBHelper.ExcuteSQL(sql) > ? true : false;
} /// <summary>
/// 返回所有数据
/// </summary>
/// <returns></returns>
public static List<Office_Supplies> GetAllOffice_Supplies()
{
string sql = "SELECT * FROM dbo.Office_Supplies";
DataTable dt = DBHelper.GetTable(sql);
List<Office_Supplies> list = new List<Office_Supplies>();
foreach (DataRow dr in dt.Rows)
{
Office_Supplies supplies = new Office_Supplies();
supplies.SuppliesID = (int)dr["SuppliesID"];
supplies.Oneclass = dr["一类"].ToString();
supplies.Twoclass = dr["二类"].ToString();
supplies.Threeclass = dr["三类"].ToString();
supplies.Fourclass = dr["四类"].ToString();
supplies.Unit = dr["单位"].ToString();
supplies.Unitprice = float.Parse(dr["单价"].ToString());
supplies.Store = (int)dr["库存"] > ? (int)dr["库存"] : ;
supplies.State = (int)dr["状态"] > ? (int)dr["状态"] : ;
list.Add(supplies);
}
return list;
}
}

DAL类库中新建DBHelper类,如下:

 public class DBHelper
{
//连接字符串DBHelper
static string strConn = ConfigurationManager.ConnectionStrings["ecology_ADDLConnectionString"].ToString(); #region 执行查询,返回DataTable对象
public static DataTable GetTable(string strSQL)
{
return GetTable(strSQL,null);
} public static DataTable GetTable(string strSQL,SqlParameter[] pas)
{
return GetTable(strSQL, pas, CommandType.Text);
} /// <summary>
/// 执行查询,返回DataTable对象
/// </summary>
/// <param name="strSQL">sql语句</param>
/// <param name="pas">参数数组</param>
/// <param name="cmdtype">Command类型</param>
/// <returns>DataTable对象</returns>
public static DataTable GetTable(string strSQL,SqlParameter[] pas,CommandType cmdType)
{
DataTable dt = new DataTable();
using (SqlConnection conn=new SqlConnection(strConn))
{
SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);
da.SelectCommand.CommandType = cmdType;
if (pas!=null)
{
da.SelectCommand.Parameters.AddRange(pas);
}
da.Fill(dt);
}
return dt;
}
#endregion #region 执行非查询存储过程和SQL语句
public static int ExcuteProc(string ProcName)
{
return ExcuteProc(ProcName, null);
} public static int ExcuteProc(string ProcName,SqlParameter[] pas)
{
return ExcuteSQL(ProcName, pas, CommandType.StoredProcedure);
} public static int ExcuteSQL(string strSQL)
{
return ExcuteSQL(strSQL, null);
} public static int ExcuteSQL(string strSQL, SqlParameter[] pas)
{
return ExcuteSQL(strSQL, pas, CommandType.Text);
} /// <summary>
/// 执行非查询存储过程和SQL语句
/// 增、删、改
/// </summary>
/// <param name="strSQL">要执行的SQL语句</param>
/// <param name="pas">参数列表,没有参数填入null</param>
/// <param name="cmdType">Command类型</param>
/// <returns>返回影响行数</returns>
public static int ExcuteSQL(string strSQL,SqlParameter[] pas,CommandType cmdType)
{
int i = ;
using (SqlConnection conn=new SqlConnection(strConn))
{
SqlCommand cmd = new SqlCommand(strSQL, conn);
cmd.CommandType = cmdType;
if (pas!=null)
{
cmd.Parameters.AddRange(pas);
}
conn.Open();
i = cmd.ExecuteNonQuery();
conn.Close();
}
return i;
}
#endregion #region 查询获取DataReader
public static SqlDataReader GetReaderByProc(string procName)
{
return GetReaderByProc(procName, null);
} public static SqlDataReader GetReaderByProc(string procName, SqlParameter[] paras)
{
return GetReader(procName, paras, CommandType.StoredProcedure);
} public static SqlDataReader GetReader(string strSQL)
{
return GetReader(strSQL, null);
} public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras)
{
return GetReader(strSQL, paras, CommandType.Text);
} public static SqlDataReader GetReader(string strSQL,SqlParameter[] paras,CommandType cmdType)
{
SqlDataReader sqldr = null;
SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand(strSQL, conn);
cmd.CommandType = cmdType;
if (paras!=null)
{
cmd.Parameters.AddRange(paras);
}
conn.Open();
//CommandBehavior.CloseConnection的作用是如果关联的DataReader对象关闭,则连接自动关闭
sqldr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return sqldr;
}
#endregion #region 批量插入数据
/// <summary>
/// 往数据库中批量插入数据
/// </summary>
/// <param name="sourceDt">数据源表</param>
/// <param name="targetTable">服务器上目标表</param>
public static void BulkToDB(DataTable sourceDt,string targetTable)
{
SqlConnection conn = new SqlConnection(strConn);
SqlBulkCopy bulkCopy = new SqlBulkCopy(conn); //用其它源的数据有效批量加载sql server表中
bulkCopy.DestinationTableName = targetTable; //服务器上目标表的名称
bulkCopy.BatchSize = sourceDt.Rows.Count; //每一批次中的行数 try
{
conn.Open();
if (sourceDt!=null && sourceDt.Rows.Count !=)
{
bulkCopy.WriteToServer(sourceDt); //将提供的数据源中的所有行复制到目标表中
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
if (bulkCopy !=null)
{
bulkCopy.Close();
}
}
}
#endregion
}

*注意:这里面的ecology_ADDLConnectionString需要去Web.config中去添加一段话:

BLL类库中新建 Office_SuppliesManage类,如下:

public class Office_SuppliesManage
{
public static bool Add(Office_Supplies supplies)
{
return Office_SuppliesService.Add(supplies);
} public static bool Delete(int SuppliesID)
{
return Office_SuppliesService.Delete(SuppliesID);
} public static bool Modify(Office_Supplies supplies)
{
return Office_SuppliesService.Modify(supplies);
} public static List<Office_Supplies> GetAllOffice_Supplies()
{
return Office_SuppliesService.GetAllOffice_Supplies();
}
}

完成三层后,最重要的是相互引用:

BLL引用DAL、Model,DAL引用Model。

接下来就是数据展现和用户操作的View,在Crud网站项目中新建OfficeSuppliesView.aspx,如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="OfficeSuppliesView.aspx.cs" Inherits="Crud.OfficeSuppliesView" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>办公用品CRUD</title>
<style type="text/css">
#fr_View {
height: 601px;
width: 1900px;
}
#mainDiv > div {
float: left;
}
</style>
</head>
<body>
<form id="fr_View" runat="server" style="width:1323px; height:1214px;">
<div style="height: 1212px; width: 1546px" id="mainDiv">
<asp:Label runat="server" Text="办公用品表:" Font-Size="Larger" ForeColor="#006699" Font-Bold="true"></asp:Label><br />
<asp:GridView ID="gv_View" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None"
BorderWidth="1px" PageSize="" AllowPaging="true" Width="785px" OnRowDeleting="gv_View_RowDeleting" OnRowDataBound="gv_View_RowDataBound"
OnRowEditing="gv_View_RowEditing" OnRowCancelingEdit="gv_View_RowCancelingEdit" OnRowUpdating="gv_View_RowUpdating" OnPageIndexChanging="gv_View_PageIndexChanging" Height="771px" >
<FooterStyle BackColor="White" ForeColor="#000066" />
<RowStyle ForeColor="#000066" />
<Columns>
<asp:TemplateField HeaderText="SuppliesID">
<ItemTemplate>
<asp:Label ID="lb_SuppliesID" runat="server" Text='<%# Bind("SuppliesID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="一类">
<EditItemTemplate>
<asp:TextBox ID="txt_Oneclass" runat="server" Text='<%# Bind("Oneclass") %>' Height="16px" Width="65px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lbl_Oneclass" runat="server" Text='<%# Bind("Oneclass") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="二类">
<EditItemTemplate>
<asp:TextBox ID="txt_Twoclass" runat="server" Text='<%# Bind("Twoclass") %>' Width="60px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lbl_Twoclass" runat="server" Text='<%# Bind("Twoclass") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="三类">
<EditItemTemplate>
<asp:TextBox ID="txt_Threeclass" runat="server" Text='<%# Bind("Threeclass") %>' Width="65px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lbl_Threeclass" runat="server" Text='<%# Bind("Threeclass") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="四类">
<EditItemTemplate>
<asp:TextBox ID="txt_Fourclass" runat="server" Text='<%# Bind("Fourclass") %>' Width="80px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lbl_Fourclass" runat="server" Text='<%# Bind("Fourclass") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="单位">
<EditItemTemplate>
<asp:TextBox ID="txt_Unit" runat="server" Text='<%# Bind("Unit") %>' Width="30px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lbl_Unit" runat="server" Text='<%# Bind("Unit") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="单价">
<EditItemTemplate>
<asp:TextBox ID="txt_Unitprice" runat="server" Text='<%# Bind("Unitprice") %>' Width="30px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lbl_Unitprice" runat="server" Text='<%# Bind("Unitprice") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="库存">
<EditItemTemplate>
<asp:TextBox ID="txt_Store" runat="server" Text='<%# Bind("Store") %>' Width="30px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lbl_Store" runat="server" Text='<%# Bind("Store") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="状态">
<EditItemTemplate>
<asp:TextBox ID="txt_State" runat="server" Text='<%# Bind("State") %>' Width="30px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lbl_State" runat="server" Text='<%# Bind("State") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="操作" ShowHeader="False">
<EditItemTemplate>
&nbsp;
<asp:Button ID="lbtn_update" runat="server" CausesValidation="True" CommandName="Update"
Text="更新" BorderColor="#5cb85c" BackColor="#5cb85c" ForeColor="White"></asp:Button>
<asp:Button ID="lbtn_cancel" runat="server" CausesValidation="False" CommandName="Cancel"
Text="取消" BorderColor="#ff0066" BackColor="#ff0066" ForeColor="White"></asp:Button>
</EditItemTemplate>
<ItemTemplate>
&nbsp;
<asp:Button ID="lbtn_edit" runat="server" CausesValidation="False" CommandName="Edit"
Text="编辑" BorderColor="#5cb85c" BackColor="#5cb85c" ForeColor="White"></asp:Button>
<asp:Button ID="lbtn_delete" runat="server" CausesValidation="False" CommandName="Delete" OnClientClick="javascript:return confirm('确认要删除么?');"
Text="删除" BorderColor="#cf0000" BackColor="#cf0000" ForeColor="White" ></asp:Button>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<SelectedRowStyle BackColor="#669999" Font-Bold="true" ForeColor="White" />
<HeaderStyle BackColor="#006699" Font-Bold="true" ForeColor="White" />
</asp:GridView>
<div style="height:300px; width:650px; float:right; border:1px solid #cccccc;">
<asp:Label runat="server" Text="添加办公用品:" Font-Size="Larger" ForeColor="#ff0066" Font-Bold="true"></asp:Label><br />
<label style="margin-left:10px;font-size:large;font-weight:bold;color:blue;">一类:</label>
<asp:TextBox ID="tb_oneclass" runat="server"></asp:TextBox><br />
<label style="margin-left:10px;font-size:large;font-weight:bold;color:blue;">二类:</label>
<asp:TextBox ID="tb_twoclass" runat="server"></asp:TextBox><br />
<label style="margin-left:10px;font-size:large;font-weight:bold;color:blue;">三类:</label>
<asp:TextBox ID="tb_threeclass" runat="server"></asp:TextBox><br />
<label style="margin-left:10px;font-size:large;font-weight:bold;color:blue;">四类:</label>
<asp:TextBox ID="tb_fourclass" runat="server"></asp:TextBox><br />
<label style="margin-left:10px;font-size:large;font-weight:bold;color:blue;">单位:</label>
<asp:TextBox ID="tb_unit" runat="server"></asp:TextBox><br />
<label style="margin-left:10px;font-size:large;font-weight:bold;color:blue;">单价:</label>
<asp:TextBox ID="tb_unitprice" runat="server" Text=""></asp:TextBox><br />
<label style="margin-left:10px;font-size:large;font-weight:bold;color:blue;">库存:</label>
<asp:TextBox ID="tb_store" runat="server" Text=""></asp:TextBox><br />
<label style="margin-left:10px;font-size:large;font-weight:bold;color:blue;">状态:</label>
<asp:TextBox ID="tb_state" runat="server" Text=""></asp:TextBox>
<asp:Label runat="server" Text="*注意:状态为0是已借出,状态为1是未借出" Font-Size="Larger" ForeColor="#cc0000" Font-Bold="true"></asp:Label>
<br /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<asp:Button ID="btn_create" runat="server" Text="添加" OnClick="btn_create_Click" Width="100px" Height="30px" Font-Bold="true" BorderColor="#5cb85c" BackColor="#5cb85c" ForeColor="White"/>
</div>
</div>
</form>
</body>
</html>

View里面涉及到几个事件方法,在

中去填写:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Bind();
}
} /// <summary>
/// 数据绑定
/// </summary>
protected void Bind()
{
gv_View.DataSource = SuppliesBLL.Office_SuppliesManage.GetAllOffice_Supplies();
gv_View.DataBind();
} /// <summary>
/// 删除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gv_View_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int SuppliesID = Convert.ToInt32((gv_View.Rows[e.RowIndex].FindControl("lb_SuppliesID") as Label).Text);
bool bol = SuppliesBLL.Office_SuppliesManage.Delete(SuppliesID);
if (bol)
{
Bind();
}
else
{
Response.Write("<script>alert('删除失败');location.href=OfficeSuppliesView.aspx;</script>");
}
} protected void gv_View_RowDataBound(object sender, GridViewRowEventArgs e)
{
int i;
for (i = ; i < gv_View.Rows.Count; i++)
{
if (e.Row.RowType==DataControlRowType.DataRow)
{
//当鼠标停留时更改背景色
e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;this.style.backgroundColor='#33cccc'");
//当鼠标移开时还原背景色
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c");
}
}
} /// <summary>
/// 让当前行处于修改状态
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gv_View_RowEditing(object sender, GridViewEditEventArgs e)
{
gv_View.EditIndex = e.NewEditIndex;
Bind();
} /// <summary>
/// 让当前行处于绑定状态
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gv_View_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gv_View.EditIndex = -;
Bind();
} /// <summary>
/// 新增
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btn_create_Click(object sender, EventArgs e)
{
Office_Supplies supplies = new Office_Supplies();
supplies.Oneclass = this.tb_oneclass.Text.ToString().Trim();
supplies.Twoclass = this.tb_twoclass.Text.ToString().Trim();
supplies.Threeclass = this.tb_threeclass.Text.ToString().Trim();
supplies.Fourclass = this.tb_fourclass.Text.ToString().Trim();
supplies.Unit = this.tb_unit.Text.ToString().Trim();
supplies.Unitprice = float.Parse(this.tb_unitprice.Text.ToString().Trim());
supplies.Store = Convert.ToInt32(this.tb_store.Text.ToString().Trim());
supplies.State = Convert.ToInt32(this.tb_state.Text.ToString().Trim());
bool bol = SuppliesBLL.Office_SuppliesManage.Add(supplies);
if (bol)
{
Response.Redirect("OfficeSuppliesView.aspx");
}
} /// <summary>
/// 更新至数据库
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gv_View_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
Office_Supplies supplies = new Office_Supplies();
supplies.SuppliesID= Convert.ToInt32((gv_View.Rows[e.RowIndex].FindControl("lb_SuppliesID") as Label).Text);
supplies.Oneclass = (gv_View.Rows[e.RowIndex].FindControl("txt_Oneclass") as TextBox).Text.ToString();
supplies.Twoclass= (gv_View.Rows[e.RowIndex].FindControl("txt_Twoclass") as TextBox).Text.ToString();
supplies.Threeclass= (gv_View.Rows[e.RowIndex].FindControl("txt_Threeclass") as TextBox).Text.ToString();
supplies.Fourclass= (gv_View.Rows[e.RowIndex].FindControl("txt_Fourclass") as TextBox).Text.ToString();
supplies.Unit= (gv_View.Rows[e.RowIndex].FindControl("txt_Unit") as TextBox).Text.ToString();
supplies.Unitprice = float.Parse((gv_View.Rows[e.RowIndex].FindControl("txt_Unitprice") as TextBox).Text.ToString());
supplies.Store = Convert.ToInt32((gv_View.Rows[e.RowIndex].FindControl("txt_Store") as TextBox).Text.ToString());
supplies.State = Convert.ToInt32((gv_View.Rows[e.RowIndex].FindControl("txt_State") as TextBox).Text.ToString());
bool bol = SuppliesBLL.Office_SuppliesManage.Modify(supplies);
if (bol)
{
Response.Write("<script>alert('修改成功');</script>");
gv_View.EditIndex = -;
Bind();
}
else
{
Response.Write("<script>alert('修改失败');</script>");
}
} /// <summary>
/// 翻页
/// 在GridView当前索引正在更改时触发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gv_View_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gv_View.PageIndex = e.NewPageIndex;
Bind();
}

最终效果展现,如下图:

点击编辑按钮:

这样就全过程实现了,办公用品表的CRUD(增删改查),在这里的解释会有些少,如果在实际操作中遇到任何问题,欢迎咨询QQ1165743451,互相探讨学习,在编程之路愈走愈远。

送上我的座右铭:

攀峰之高险岂有崖巅,搏海之明辉何来彼岸,前进不止,奋斗不息!加油加油加油!

原著:清风一人醉http://www.cnblogs.com/W--Jing/

以上方法可以个人分享研究!

不可做商业项目,违者必究!

三层实现办公用品表CRUD(全过程)-ASP的更多相关文章

  1. DataSnap ClientdataSet 三层中主从表的操作

    非原创  摘自:http://hi.baidu.com/yagzh2000/blog/item/fc69df2cb9845de78b139946.html三层中主从表的操作(删除.新增.修改)一定要在 ...

  2. 2单表CRUD综合样例开发教程

    东软集团股份有限公司 基础软件事业部 单表CRUD综合样例开发教程 东软机密 tui 更改履历 版本号 更改时间 更改的 图表和章节号 状态 更改简要描述 更改申 请编号 更改人 批准人 V1.0 2 ...

  3. Mybatis注解开发单表CRUD

    Mybatis注解开发单表CRUD mybatis注解开发和xml开发不可兼容,要么全部使用注解,要么全部使用xml,个人建议注解,简单. 当实体类属性名称和数据库表属性名称一致时:无需配置Resul ...

  4. SQLSERVER单表CRUD通用方法

    一.适用场景 ①当你书写简单的增删改查心累了 ②当你的项目不考虑并发.高性能 ③当你追求更快速的开发效率 ④当你的业务只涉及单表 二.代码展示 ①单表Insert public bool Insert ...

  5. Hive学习笔记——安装和内部表CRUD

    1.首先需要安装Hadoop和Hive 安装的时候参考 http://blog.csdn.net/jdplus/article/details/46493553 安装的版本是apache-hive-2 ...

  6. MySQL学习(五)——使用JDBC完成用户表CRUD的操作

    通过案例我们发现“获得连接”和“释放资源”两次代码将在之后的增删改查所有功能中都存在,开发中遇到此种情况,将采用工具类的方法进行抽取,从而达到代码的重复利用. 1.使用properties配置文件 开 ...

  7. linq to sql 三层架构中使用CRUD操作

    /// <summary> /// 数据层 /// </summary> public partial class GasBottles : IGasBottles { #re ...

  8. 不删除记录的表CRUD的常见处置

    为什么不删除记录,因为这些记录只是暂时不用了,以后还是有可能会用到的,比如说统计:另外一些主键外键依赖级联删除的场合也不好真删的,容易批量删除.真删了就不容易恢复回来了. 一般做法是,增加一个avai ...

  9. 品优购项目 单表过程 乒乓过程 入口 MyBatis逆向工程 dubbo框架搭建 品牌表CRUD bug集锦

随机推荐

  1. 微信原始坐标转换成百度坐标 lat lng

    如有帮到你记得结合我这篇博客里的方法.... http://www.cnblogs.com/zc290987034/p/8294988.html {:wx_jssdk_config("fal ...

  2. Python学习之旅(二十八)

    Python基础知识(27):常用内建模块(Ⅲ) 1.urlblib urllib提供了一系列用于操作URL的功能 url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, ...

  3. Python学习之旅(二十一)

    Python基础知识(20):错误.调试和测试 一.错误处理 在运行程序的过程中有可能会出错,一般我们会在添加一段代码在可能出错的地方,返回约定的值,就可以知道会不会出错以及出错的原因 1.使用try ...

  4. 数组copy

    数组copy(推荐用法) System.arraycopy的用法 int[] src = {1,3,5,7,9,11,13,15,17}; int[] dest = {2,4,6,8,10,12,14 ...

  5. The way to unwind the stack on Linux EABI

    I. probe the stack frame structure The original idea is to unwind the function call stack according ...

  6. 苹果 ios 微信浏览器界面 ajax 提交带 file 的 form 总是走error方法

    1. 问题 问题出在微信端,而且是苹果机的微信端(苹果你咋这么矫情,安卓正常).:代码还是之前的代码,貌似是苹果升级系统后部分版本出现的 BUG,后来证明确实跟 ios 版本有关,网上也找过类似的解决 ...

  7. Numpy float64和Python float是一样的

    >>> numpy.float64(5.9975).hex() # 函数用于将10进制整数转换成16进制,以字符串形式表示. '0x1.7fd70a3d70a3dp+2' >& ...

  8. JavaScript 数组插入元素并排序

    1.插入类排序 插入类排序的思想是:在一个已排好序的序列区内,对待排序的无序序列中的记录逐个进行处理,每一步都讲待排序的记录和已排好的序列中的记录进行比较,然后有序的插入到该序列中,直到所有待排序的记 ...

  9. 竖倾斜ScrollView

    using UnityEngine; using UnityEngine.EventSystems; public class ObliqueScroll : MonoBehaviour,IDragH ...

  10. DoubleDQN---tensorflow实现

    完整代码:https://github.com/zle1992/Reinforcement_Learning_Game 开山之作: <Playing Atari with Deep Reinfo ...