好久都没有写写技术博客了,自己最近几个月都要忙着搬家还有添置家当,所以一些博客就很少去写了,天道酬勤,有些吃饭的家伙还是不能有所懈怠,所以送上一个花了几小时给人事同事写的简单办公用品表的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. php验证18位身份证,准到必须输入正确的身份证号,

    /** * 验证18位身份证(计算方式在百度百科有) * @param string $id 身份证 * return boolean */ function check_identity($id=' ...

  2. linux samba建立共享文件夹

    sudo  apt-get install samba 1.  mkdir  /home/lgs/samba_share    (/home/lgs为自己的家目录) 2.  find    -name ...

  3. python语法_字符串拼接

    +号可以用来做字符串拼接 print("abc"+"efg"+"def") abcefgdef 字符串(str)与数字(int)不能使用+进 ...

  4. lucene学习教程

    1Lucene的介绍 ①Lucene是什么: 是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎 ②Lu ...

  5. poi导入excel表格数据到数据库的时候,对出生日期的校验

    出生日期格式为8位数字的字符串 如:yyyyMMdd 规则:yyyy大于1900并小于当前时间,月.日 按日期规则校验 //解决读过来的字符串显示为科学计数法问题 BigDecimal bd = ne ...

  6. CentOS下rpm命令详解

    CentOS下rpm命令详解 rpm,Redhat Package Manager,即为红帽公司为RHEL开发的专用包管理器,后来更改为RPM Package Manager,类似于GNU项目,使用递 ...

  7. Android studio中导入SlidingMenu问题

    我们导入的library文件夹中的build.gradle 文件里面写的很清楚: android {     compileSdkVersion 17     buildToolsVersion &q ...

  8. JavaScript中各种对象之间的关系

    上图: 此外,补充一下图中用到的概念: 1.内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始化阶段就被创建好的对象,是后者的一个子集:而后者包括了一些在运行过程中动 ...

  9. 如何相互转换逗号分隔的字符串和List【转】

    将逗号分隔的字符串转换为List 方法 1: 利用JDK的Arrays类 String str = "a,b,c"; List<String> result = Arr ...

  10. #WEB安全基础 : HTTP协议 | 0x2 HTTP有关协议通信

    IP,TCP,DNS协议与HTP协议密不可分 IP(网际协议)位于网络层,几乎所有使用网络的系统都会用到IP协议 IP协议的作用:把数据包发送给对方,要保证确实传送到对方那里,则需要满足各类条件.两个 ...