最近参照Pconline用.net写了个虚拟装机平台(http://mydiy.pconline.com.cn/),其实也没什么难度,主要是看到Pconline是用jsp写的,想用.net实现一下。事实证明,.net确实强哈!
Pconline的虚拟装机平台基本上就2个嵌入框架,左框架上方3个连动下拉菜单,下方产品列表。这个用DropDownList+DataGrid很容易实现,将DropDownList的AutoPostBack属性设为True,很容易实现列表的连动,美中不足的是页面刷得太影响心情,等学了Ajax再换掉。右边框架基本上也是一个DataGrid里实现,唯一不同的是右边的DataGrid数据来源于Session中的DataTable。
具体实现方法,在Global.asax中定义:
void Session_Start(object sender, EventArgs e)
{
DataTable dtProd = new DataTable();
DataColumn keyCol = new DataColumn("id",typeof(Int32));
dtProd.Columns.Add(keyCol);
dtProd.Columns.Add(new DataColumn("classid", typeof(Int32)));
dtProd.Columns.Add(new DataColumn("num",typeof(Int32)));
dtProd.Columns.Add(new DataColumn("price", typeof(decimal)));
dtProd.Columns.Add(new DataColumn("prodname", typeof(string)));
DataColumn[] primKey = new DataColumn[1];
primKey[0] = keyCol;
dtProd.PrimaryKey = primKey;
Session["dtProd"] = dtProd;
Session["login"] = "";
}
创建一个会话表,然后在左框架DataGrid中添加
protected void DG_LP_ItemCmd(object sender, DataGridCommandEventArgs e)
{
if (e.CommandName == "btn_Choose")
{
int id = Convert.ToInt32(e.Item.Cells[0].Text);
DataTable dtProd = (DataTable)Session["dtProd"];
DataRow rowFound = dtProd.Rows.Find(id);
if (rowFound == null)
{
DataRow rowNew = dtProd.NewRow();
rowNew["id"] = id;
rowNew["classid"] = Convert.ToInt32(DDL2.SelectedValue);
rowNew["num"] = 1;
rowNew["price"] = Convert.ToInt32(e.Item.Cells[3].Text);
rowNew["prodname"] = ((HyperLink)e.Item.Cells[1].Controls[0]).Text.Trim();
dtProd.Rows.Add(rowNew);
}
Response.Write("<script>parent.right.location.href='Right.aspx';</script>");
}
}
当用户点击选择时,将选择的产品信息添加到会话表中,然后刷新右边框架,使右边更新产品信息!